1.确定爬取目标
提取出猫眼电影TOP100的电影名称、时间、评分、图片等信息,提取的URL为:http://maoyan.com/board/4,提取的结果以文件形式保存下来。
2.前期准备
本项目需要用到requests库,请确保已经正确安装好了requests库,如果没有安装,可以用pip指令进行安装,非常简单,这里就不再详细叙述了。
打开URL后,可以看到排名第一的是「霸王别姬」,可以看到页面显示的有效信息有电影名字、主演、上映时间、上映地区、评分、图片等信息。
3.“种子”的分析,生成爬虫入口
现在需要确定正则表达式,在谷歌浏览器,打开开发者选项(F12),查看其中的一个条目的源代码,如图所示。
首先,我们先提取它的排名信息,它的排名信息是class为board-index的i节点内,这里利用非贪婪匹配来提取i节点内的信息,正则表达式如下:
在学习过程中有什么不懂得可以加我的
python学习资源qun,855408893
群里有不错的学习视频教程、开发工具与电子书籍。
与你分享python企业当下人才需求及怎么从零基础学习好python,和学习什么内容
<dd>.*?board-index.*?>(\d+)</i>.*?
然后,提取它的图片信息,正则表达式改写为:
<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)"
再提取电影名字,它在p节点内,class为name。所以,用name做一个标志位,然后进一步提取其内a节点的正文内容,此时表达式变为:
<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'
最后,用同样的原理,提取主演、发布时间、评分等内容,此时,正则表达式为:
<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'
+ '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
+ '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)
4.写入文件
我们最后需要将提取的结果写入文件,这里直接写入到一个文本文件中。通过JSON库的dumps()方法实行字典的序列化,并指定ensure_ascii参数为False,这样可以保证输出结果是中文形式而不是Unicode编码。代码如下:
def write_to_file(content):
with open('result.txt','a',encoding='utf-8') as f:
f.write(json.dumps(content,ensure_ascii=False)+'\n')
5.需要注意
adb 命令还是比较方便的,我们可以直接用 adb 命令中的截图方法,格式如下。
如果,我们按上面的思路,只能提取到首页的信息。我们将网页滚动到最下方,可以发现有分页列表,点击第2页,可以发现此时页面的URL变成了http://maoyan.com/board/4?offest=10,比之前的URL多了一个参数,那就是offest=10,而目前显示的结果是排行11~20名的电影,初步推断这是一个偏移量参数。
当我们点击第3页时,参数offest=20。所以,如果要想提取TOP100电影,只需要分开请求10次,而10次的offest参数分别设置为0、10、20…90即可。
所以,当我们提取目标时,还需要遍历,给这个链接传入offest参数,实现其他90部电影的爬取,此时添加如下调用即可:
def main(offset):
url = 'http://maoyan.com/board/4?offset=' + str(offset)
html = get_one_page(url)
for item in parse_one_page(html):
print(item)
write_to_file(item)
对Python感兴趣或者是正在学习的小伙伴,可以加入我们的Python学习扣qun:855408893,看看前辈们是如何学习的!从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!分享一些学习的方法和需要注意的小细节,教你如何实现边学习边用Python赚钱的学习方式。点击加入我们的 python学习者聚集地
6.整合代码
最后,运行代码,可以看到,电影信息也已经全部保存到了文本文件中了。
通过这个简单的爬虫实例,可以帮助我们更好的理解requests库和正则表达式。
转载:https://blog.csdn.net/mtbcxx007/article/details/102469688