第一课《爬取豆瓣TOP250》
一、准备工作
- 安装python。
- 安装jupyter库,按window+R,会弹出一个方框,输入cmd会弹出窗口,输入pip install jupyter,安装jupyter库。
- 安装好jupyter后,建一个文件夹,在文件夹路径那里输入cmd,会出现一个窗口了,再直接输入jupyter notebook,按回车,便可直接进入jupyter的网络编辑页面。
如图:
出现此界面后便会自动跳转到jupyter的网络编辑页面,如图:
在此页面后,点击右上角的New,选择Python3,会新建一个网页编辑器。
二、开始分析网页
(1)URL链接分析网页
第一页:https://movie.douban.com/top250?start=0&filter=
第二页:https://movie.douban.com/top250?start=25&filter=
第三页:https://movie.douban.com/top250?start=50&filter=
第四页:https://movie.douban.com/top250?start=75&filter=
第五页:https://movie.douban.com/top250?start=100&filter=
以上为豆瓣电影top250的前五个网页链接,由上我们可以看出黄色标记出来的部分是它们的不同,并且是有规律的,0,、25、50、75、100,所以可以推出后五页的链接。
例如:第九页的链接为:https://movie.douban.com/top250?start=200&filter=
(2)用for循环分析
结果如下:
(3)用函数表示出URL链接
将start=0改为start=%s,后面的%page表示将page函数中的数值范围赋予给s,即可得出十个网页的链接。点击第五个链接,就到top250 中的第五页,与之前得到的链接相同。
三、爬取网页
(1)安装requests库
进行这步操作需要安装requests库,按window+R,会弹出一个方框,输入cmd会弹出窗口,输入pip install requests,安装requests库。
以请求第一页为例如图:
(2)在网页上对代码进行审查
在空白处点击右键,进入检查,点击network,点击all,在对网页进行刷新,就会出现网页的组成,如图片、文字、文件等。
如图:
(3)请求源代码(HTML),向服务器发出请求
(4)伪装浏览器
首先,将代码审查中的user-agent复制过来,将其构成一个字典。
如图:
如果在requests.get(url = test_url,headers=headers后面+,text,则有:
如何快速查找用ctrl+f组合键,如在豆瓣top250第一页复制这段话:
回到编辑页面按ctrl+f组合键则有:
四、筛选信息
主要工具有 xpath、beautifulsoup(bs4)、re(正则表达式)
(1)安装lxml库
按window+R,会弹出一个方框,输入cmd会弹出窗口,输入pip install lxml,安装lxml库。
(2)从top250提取信息
以提取肖申克的救赎为例:
首先在网页上找到肖申的救赎,选中右击,点击检查,可在代码中找到,如图:
在网页代码中选中这一行右击,点击copy,点击copy xpath,然后将其粘贴在如图选中位置。
再在span[1]后加/text(),按运行,得:
上图的结果有[],如不需要可以+(0),如图:
(3)复制整个网页的xpath路径
找到每个电影模块对应的序列代码,如图:
将图中右侧鼠标选中的位置的xpath路径复制下来为:
第一个路径://[@id=“content”]/div/div[1]/ol/li[1]
第二个路径://[@id=“content”]/div/div[1]/ol/li[2]
第三个路径://[@id=“content”]/div/div[1]/ol/li[3]
最后一个路径://[@id=“content”]/div/div[1]/ol/li[25]
可以发现它们的不同在于后面[ ]里面的数字,且由1增加到25。
将语句后的[ ]删除,便可表示所有的xpath路径,如图:
共有25个返回值,li为自己写的赋值,可用len()函数查看返回值的长度
如下图:
(4)获取电影名称
25个路径里面,每个路径里面有10个电影的名字,共250个。我们需要从25个xpath路径里面获取得250个电影,然后再从这250个电影(item)的xpath路径里面获取250个电影名。
我们来比较一下xpath路径
可以发现,li[ ]中的数字是它们的不同之处。
因此代码表示为:
此处选中的点表示上面写的li后面括号里的所有路径,此处name后面写的是第一页的名字的共同特征,所以只输出第一页的所有电影名字,结果如下:
可在代码后加[0],输出纯文字,结果如下:
(5)获取电影链接
我们来比较一下电影链接xpath路径:
可以发现,li[ ]中的数字是它们的不同之处。
代码表示:
此处选中的点表示上面写的li后面括号里的所有路径,此处dy_url后面写的是第一页电影链接的共同特征,所以只输出第一页的所有电影链接,结果如下:
(6)获取电影星级
我们来比较一下电影星级xpath路径:
可以发现,li[ ]中的数字是它们的不同之处。
代码表示为:
此处选中的点表示上面写的li后面括号里的所有路径,此处rating后面写的是第一页电影星级的共同特征,所以只输出第一页的所有电影星级,结果如下:
(7)获取电影评分
我们来比较一下电影评分xpath路径:
可以发现,li[ ]中的数字是它们的不同之处。
代码表示为:
此点表示上面写的li后面括号里的所有路径,此处rating_num后面写的是第一页电影评分的共同特征,所以只输出第一页的所有电影评分,结果如下:
(8)获取电影评价
方法同上
代码表示为:
结果如下:
(9)获取电影排名
方法同上
代码如下:
结果如下:
(10)综合输出
代码如下:
结果如下:
五、正则表达式
(1)正则表达式理解
代码如下:
因为想要把一只兔替换了,所以将一只兔的位置改为(.*?)。
只要保留离5最近的g和-,其余在rating5-t中的字母不论怎么变都能输出5。
(2)用专门提取数字的re来提取数字
代码如下:
不是数字的用""代替。
双引号中不写替代内容时,替代内容可写可不写。
(3)把评价中的人数用re表示出来
代码如下:
结果如下:
(4)把星级提取出来
代码如下:
结果如下:
精化:
结果如下:
综合全部:
结果为:
六、保存到CSV
分三步:
- 打开文件
- 放进文件夹
- 关闭文件夹
(1)创建文件夹并打开
打开豆瓣250.csv这个文件,打开时有可能为乱码,可将文件夹删除重新写入,或将encoding='utf-8-sig’改为encoding=‘utf-8-sig’
(2)将爬取内容写入
代码:
结果:
(3)写入成功后
七、保存豆瓣top250到csv
代码为:
结果如下:
此时,所有内容写入成功,打开CSV文件可看到:
爬取豆瓣top250结束!