urllib+BeautifulSoup无登录模式爬取豆瓣电影Top250
对于简单的爬虫任务,尤其对于初学者,urllib+BeautifulSoup足以满足大部分的任务。
1、urllib是Python3自带的库,不需要安装,但是BeautifulSoup却是需要安装的。安装方式:pip install beautifulsoup4
其官方文档中文版地址:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
2、爬取任务:爬取的内容为每部电影的名字 导演 主演 年代 国家 类型 评分 评分人数
3、展示方法:(1)、直接打印 (2)、存到Mysql数据库
4、分析:
网站布局:1、Top250共10页 每页25部电影 网站格式:https://movie.douban.com/top250?start=[0,25,50,75,100,125,150,175,200,225] 每一个数字代表一行
对其中一部电影进行分析:
<div class="hd">
<a href="https://movie.douban.com/subject/1292052/" class="">
<span class="title">肖申克的救赎</span>
<span class="title"> / The Shawshank Redemption</span>
<span class="other"> / 月黑高飞(港) / 刺激1995(台)</span>
</a><span class="playable">[可播放]</span>
</div>
<div class="bd">
<p class="">
导演: 弗兰克·德拉邦特 Frank Darabont 主演: 蒂姆·罗宾斯 Tim Robbins /...<br>
1994 / 美国 / 犯罪 剧情
</p>
<div class="star">
<span class="rating5-t"></span>
<span class="rating_num" property="v:average">9.6</span>
<span property="v:best" content="10.0"></span>
<span>765942人评价</span>
</div>
<p class="quote">
<span class="inq">希望让人自由。</span>
</p>
</div>
主要部分在 div class='article'下的 ol class='grid_view'中的 li里面。各个信息都可以在这里面找到。
《一》利用BeautifulSoup的find函数,可以轻松的实现打印功能,保存到本地csv中:
代码如下:
#-*- encoding:utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
from urllib.error import HTTPError
import re
import csv
####本程序为爬取豆瓣电影Top250 ,先放在本地txt文档中,后续放到Mysql中
####本程序为bs4,后续改为Scrapy
###爬取的内容为每部电影的名字 导演 主演 年代 国家 类型 评分 评分人数 。。。 """分析部分: 网站布局:1、Top250共10页 每页25部电影 网站格式:https://movie.douban.com/top250?start= """ def crawl(baseurl,bias):
try:
html=urlopen(baseurl+'?start=%d' %bias)
except HTTPError:
return None
bsObj=BeautifulSoup(html,'lxml')
totalContent=bsObj.find('ol',{'class':'grid_view'}).findAll('li')###每一页25个电影的全部信息
retList=[]
for eachMovie in totalContent:
rank=eachMovie.em.get_text() ###获取排名
href=eachMovie.a['href'] ####获取到连接地址
nameList=eachMovie.find_all('span',{'class':'title'})
Chinesename=nameList[0].get_text() ### 中文名字
if(len(nameList)==2):
Englishname=nameList[1].get_text() ##英文名字
else:
Englishname="None"
othername=eachMovie.find('span',{'class':'other'}).get_text().replace('/','')
relate=eachMovie.find('p',{'class':''}).get_text().replace(' ','') ###主演,导演等信息 需要分割处理
rating=eachMovie.find('span',{'class':'rating_num','property':'v:average'}).get_text() ##评分
starDiv=eachMovie.find('div',{'class':'star'})
ratingN=starDiv.find_all('span')[3].get_text()
ratingNum=re.split(r"\D",ratingN)[0] ####评价的人数
try:
abstract=eachMovie.find('span',{'class':'inq'}).get_text()
except AttributeError:
abstract="None"
OutputStr="排名: "+rank+'\t网址: '+href+'\t中文名: '+Chinesename+'\t英文名: '+Englishname+'\t别名: '+othername+\
'\t评分: '+rating+'\t评价人数: '+ratingNum+'\t摘要: '+abstract+"\t"+'相关信息:'+relate
print(OutputStr)
eachList=[rank,href,Chinesename,Englishname,othername,rating,ratingNum,abstract,relate]
retList.append(eachList)
return retList
def storeToCsv(AttributeList):
csvFile=open('res.csv','a+',encoding='utf-8')
try:
writer=csv.writer(csvFile)
writer.writerow(('排名',"网址",'中文名','英文名','别名','评分','评价人数','摘要','相关信息'))
for i in range(10):
for j in range(25):
writer.writerow(AttributeList[i][j])
finally:
csvFile.close() if __name__=='__main__':
url='https://movie.douban.com/top250'
biasList=[0,25,50,75,100,125,150,175,200,225]
allList=[]
for eachBias in biasList:
s=crawl(url,eachBias)
allList.append(s)
storeToCsv(allList)
运行结果如下图:
urllib+BeautifulSoup无登录模式爬取豆瓣电影Top250的更多相关文章
- python2.7爬取豆瓣电影top250并写入到TXT,Excel,MySQL数据库
python2.7爬取豆瓣电影top250并分别写入到TXT,Excel,MySQL数据库 1.任务 爬取豆瓣电影top250 以txt文件保存 以Excel文档保存 将数据录入数据库 2.分析 电影 ...
- 一起学爬虫——通过爬取豆瓣电影top250学习requests库的使用
学习一门技术最快的方式是做项目,在做项目的过程中对相关的技术查漏补缺. 本文通过爬取豆瓣top250电影学习python requests的使用. 1.准备工作 在pycharm中安装request库 ...
- python 爬虫&爬取豆瓣电影top250
爬取豆瓣电影top250from urllib.request import * #导入所有的request,urllib相当于一个文件夹,用到它里面的方法requestfrom lxml impor ...
- Python爬虫入门:爬取豆瓣电影TOP250
一个很简单的爬虫. 从这里学习的,解释的挺好的:https://xlzd.me/2015/12/16/python-crawler-03 分享写这个代码用到了的学习的链接: BeautifulSoup ...
- scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250
scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...
- scrapy爬取豆瓣电影top250
# -*- coding: utf-8 -*- # scrapy爬取豆瓣电影top250 import scrapy from douban.items import DoubanItem class ...
- 【转】爬取豆瓣电影top250提取电影分类进行数据分析
一.爬取网页,获取需要内容 我们今天要爬取的是豆瓣电影top250页面如下所示: 我们需要的是里面的电影分类,通过查看源代码观察可以分析出我们需要的东西.直接进入主题吧! 知道我们需要的内容在哪里了, ...
- Scrapy中用xpath/css爬取豆瓣电影Top250:解决403HTTP status code is not handled or not allowed
好吧,我又开始折腾豆瓣电影top250了,只是想试试各种方法,看看哪一种的方法效率是最好的,一直进行到这一步才知道 scrapy的强大,尤其是和selector结合之后,速度飞起.... 下面我就采用 ...
- Scrapy爬虫(4)爬取豆瓣电影Top250图片
在用Python的urllib和BeautifulSoup写过了很多爬虫之后,本人决定尝试著名的Python爬虫框架--Scrapy. 本次分享将详细讲述如何利用Scrapy来下载豆瓣电影To ...
随机推荐
- 怎样用SQL语句查询一个数据库中的所有表?
怎样用SQL语句查询一个数据库中的所有表? --读取库中的所有表名 select name from sysobjects where xtype='u'--读取指定表的所有列名select nam ...
- window上利用pip安装pandas
官网推荐的是直接使用Anoconda,它集成了pandas,可以直接使用.安装挺简单的,有windows下的安装包.如果不想安装庞大的Anoconda,那就一步一步用pip来安装pandas.下面我主 ...
- fontsize可以解决img标签插入图片之间的缝隙
当我们用img标签连续插入多张图片的时候,图片和图片之间会出现缝隙,通常我们的做法是用DIV将图片包起来进行浮动来解决这个问题,但是还有一种解决方法是在img的父级元素里面设置font-size:0来 ...
- Android数据持久化技术 — — —文件存储
文件保存 package com.example.datastroredtest; import android.app.Activity;import android.os.Bundle;impor ...
- struts2 错误提示页面
以前做的一个网站,最近服务器后台出现一些异常,问题是客户访问一个该网站下不存在的action,为了给客户一个友好的界面提示以及减小服务器端日志文件的内容.就在struts2下进行了如下配置: 在str ...
- 服务器列表里找不到OracleOraDb10g_home1TNSListener
先安装的ORACLE DB,后配置的数据库,TNSNAMES.ORA, LISTENER.ORA配置完毕,客户端连接不上TNS服务器,发现服务列表里没有OracleOraDb10g_home1TNSL ...
- CxImage图像库的使用 .
http://blog.csdn.net/wangjie0377/article/details/7830405 CxImage图像库 CxImage下载地址:http://www.codeproje ...
- lumia520刷机注意事项
1.下载后的固件名称中设备名前的随机字符都要去掉 2.安装完nokia care suit后最好在driver目录下重新双击安装usb driver
- 在阿里云ECS上搭建LEMP环境
在阿里云买ECS的时候选择自己习惯的镜像系统,我一般都是使用Linux Ubuntu,所以,以下的配置都是在Ubuntu 14.04稳定支持版的环境中搭建Linux+Nginx+Mysql+PHP环境 ...
- Uncaught ReferenceError: WebForm_DoPostBackWithOptions is not defined
环境:Asp.Net网站,Framework版本4.0,IIS版本7.0问题:按钮失效,下面是按钮代码: <a id="dnn_ctr1161_Login_Login_DNN_cmdL ...
