1、准备工作
在pycharm中安装request库
请看上图,在pycharm中依次点击:File->Settings。然后会弹出下图的界面:
点击2中左上角的“+”按钮,弹出下图的界面:
在右上角的查询框输入requests,然后点击“Install Package”按钮安装requests插件。
2、目标
抓取每部电影的名字、主演、评分、图片等信息, 并保存在txt文本文件中。
3、分析豆瓣top250电影首页
1、分析豆瓣电影top250的网页https://movie.douban.com/top250,在浏览器中打开该网页:
可以看到一页显示25部电影。250部电影分10显示:
要抓取250部电影需要抓取10次。下面是每一页的网页链接:
https://movie.douban.com/top250?start=0&filter= 首页,等效于https://movie.douban.com/top250 https://movie.douban.com/top250?start=25&filter= #第2页 https://movie.douban.com/top250?start=50&filter= #第3页 ... ... ... https://movie.douban.com/top250?start=225&filter= #第10页通过分析上面的链接可以得出一个规律:start=0显示1到25部电影,start=25显示26到50部电影,以此类推,在抓取每一页的电影时,是需要改变start的值即可。
4、抓取豆瓣电影top250首页
代码如下:
通过上述的代码我们可以学习到requests类库中如何使用headers信息和设置代理。
headers头信息和proxies代理信息都是定义为dict词典变量,然后在调用requests.get()方法时传输这个两个参数:
很多网站都有反爬虫的措施,对于没有headers头信息的请求一律认为是爬虫,禁止该请求的访问。因此在每次爬取网页时都需要加上headers头信息。
对于访问过于频繁的请求,客户端的IP会被禁止访问,因此设置代理可以将请求伪装成来自不同的IP,前提是要保证代理的IP地址是有效的。
5、抓取每一部电影的信息
查看网页源代码有两种方式:
通过鼠标右键点击查看“查看源文件”选项,或者通过浏览器的开发者工具选项,然后点击Network查看源码:
下图是一部电影在HTML网页中的显示,我们要做的就是从HTML中提取出电影名称、主演、图片等信息。
提取电影的信息需要用到正则表达式。
通过上图可以看到一部电影的信息对应的源代码是<div>节点,红色框所示。我们先用正则表达式提取到每部电影的所有信息:
regix = '<div>'
class为pic的div节点包含电影的排名和电影图片信息,提取电影排名和电影图片信息的正则表:
class为info的div标签中包含了电影的名字、导演和演员等信息,电影名字是在class为hd的div的节点内,<span>节点内包含的是电影的名字,<span>节点内包含的是电影的别名,上图中的褐色框部分,因此提取电影名字的正则表达式为:
regix = '<div>.*?<div>.*?<em>(.*?)</em>.*?<img.*?src="(.*?)">.*?divhd".*?class="title">(.*?)</span>.*?class="other">(.*?)</span>'class为bd的节点内包含的是电影的导演和主演信息,其中class为“”的p节点内包含的是电影的导演和演员信息,其中还包含了<br>标签,上图中的紫色框部分,为了提取电影导演和演员的信息,正则表达式改写为:
regix = '<div>.*?<div>.*?<em>(.*?)</em>.*?<img.*?src="(.*?)">.*?divhd".*?class="title">(.*?)</span>.*?class="other">(.*?)</span>.*?<div>.*?<p>(.*?)<br>(.*?)</p>'