爬虫学习笔记(四)
下面我们做一个小项目,爬取猫眼电影排行
目标
我们要提取出猫眼电影 TOP100 的电影名称、时间、评分、图片等信息,提取的站点 URL 为 http://maoyan.com/board/4 提取的结果会以文件形式保存下来。
抓取分析
我们需要抓取的目标站点为 http://maoyan.com/board/4 打开之后便可以查看到榜单信息
将网页滚动到最下方,可以发现有分页的列表,直接点击第 2 页,观察页面的 URL 和内容发生了怎样的变化。
可以发现页面的 URL 变成 http://maoyan.com/board/4?offset=10, 比之前的 URL 多了一个参数,那就是 offset=10,而目前显示的结果是排行 11 - 20 名的电影,初步推断这是一个偏移量的参数。再点击下一页,发现页面的 URL 变成了 http://maoyan.com/board/4?offset=20, 参数 offset 变成了 20,而显示的结果是排行 21 - 30 的电影。
由此可以总结出规律,offset 代表偏移量值,如果偏移量为 n,则显示的电影序号就是 n+1 到 n+10,每页显示 10 个。所以,如果想获取 TOP100 电影,只需要分开请求 10 次,而 10 次的 offset 参数分别设置为 0、10、20…90 即可,这样获取不同的页面之后,再用正则表达式提取出相关信息,就可以得到 TOP100 的所有电影信息了。
抓取首页
我们先右键查看页面源代码,看看页面源代码中是否存在我们需要的信息。
可以看到,页面源代码中存在我们需要的电影名称,电影图片,主演、发布时间等信息。所以我们直接抓取页面源代码。
1 | import requests |
正则提取
我们从页面源代码中使用正则表达式提取出需要的数据
提取电影名称
<p class=”name”>.*?title=”(.*?)” data-act=
提取电影图片
<img data-src=”(.*?)” alt=
提取电影主演
<p class=”star”>(.*?)</p>
提取电影上映时间
<p class=”releasetime”>(.*?)
提取电影评分
<p class=”score”>(.?)(.?)
我们可以把所有的正则表达式整合在一起
<img data-src=”(.?)” alt=.*?
.
?title=”(.?)” data-act=.?(.?)
.?(.?)
.?(.?)(.?)
这样一个正则表达式可以匹配一个电影的结果,里面匹配了 5个信息。
接下来,我们再定义解析页面的方法Analyze_webpage,主要是通过正则表达式来从结果中提取出我们想要的内容,实现代码如下:
1 | def Analyze_webpage(html): |