需求:
豆瓣top250电影:https://movie.douban.com/top250
爬取 电影的名字 评分 引言 详情页的url 1-10页 保存到csv文件当中 (下图绿色框内容为所需爬去内容)
总体思路把握:
需求拆解:
需要爬去1-10页(共计250部电影信息)
存在遍历每一页获得每一页数据的需求
爬取 电影的名字 评分 引言 详情页的url
最后我们要得到的是250部电影,每部电影包含的信息是Name, Score, Quote, Links
可以认为每一部电影信息就是一个字典:{‘Name’ : '...', 'Score': '...', 'Quote': '...', ‘Links’: '...'}
以字典Key-Value 形式表示。
而所有电影信息可以是列表嵌套字典的格式,如下:
[{电影1字典}, {电影2字典},.....,{电影250字典}]
保存到CSV文件中
因为每部电影信息是以字典形式存储信息的。
因此可以使用csv.Dictwriter(object, titile) 方法直接写入字典信息
需求拆解总结:
每部电影信息都是一个字典,每一个html页面有25部电影 --> 第一层遍历后获取每一页25部电影的列表: [{该页第1部电影信息}, {该页第2部电影信息}, ... , {该页第25部电影信息}]
然后将这一页的结果列表加入到总体结果列表,然后遍历下一页面 --> 第二层遍历获取总共10页所有信息
分析1-10页URL地址规律
对于目标URL进行分析:
第一页:https://movie.douban.com/top250
第二页: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=0&filter=
发现第一页也是适用的,那么很容易总结出规律,每一页25部电影,以start = PageNum * 25 作为偏移量,修改URL地址即可
可以使用如下代码进行遍历url:
base_url = 'https://movie.douban.com/top250?start={}&filter='
for i in range(10):
req_url = base_url .format ( i * 25)
分析页面
鼠标右键-->检查,找到所需爬去内容在element中的位置,class='info'
在网页源代码中寻宅此标签,并确认所有需要爬去的内容是否在其中:
每一个网页,25部电影信息,分别在25个 li标签内:而我们定义的<div class="info"> 存在于每一个 li 子标签下
分级如下:li --> <div class="item"> --> <div class="info"> (相同颜色箭头为同一级兄弟标签关系,平级)
获取网页源代码
使用requests模块请求,并获取html网页源代码并转换成字符串格式
匹配最小父级标签
匹配并列子级标签 & 定义子级标签内解析公式(xpath)&遍历子级获取需求数据 (黄色框选内容)
遍历每一页网页(1-10页)
保存数据至文档
完整代码如下:
执行结果:
用excel打开: