目标:抓取豆瓣小王子读者头像链接、名字与评语,并保存于本地excel。
爬虫的流程:发送请求——获得页面——解析页面——抽取并储存内容。
我们依然便采用:requests(获取)——xpath(解析)——pandas(储存)
废话不多说,先上结果与代码:
# -*- coding: utf-8 -*-
import requests
from lxmlimport etree
import pandasas pd
#1:把所有url放入urls这个列表里。2:用for循环实现翻页
urls= ['https://book.douban.com/subject/1084336/comments/new?p={}'.format(i) for iin range(1,101,1)]
comments= [] #创建一容器来放爬去的内容
for urlin urls:
r= requests.get(url).text#获取text
s= etree.HTML(r) #把html转换成lxml可解析的对象
files= s.xpath('//*[@id="comments"]/ul/li') #解析到li标签,然后用for循环遍历里面的内容
for itin files:
# 获取img,[0].strip:字符格式化,让输出更美观
img= it.xpath('div[1]/a/img/@src') [0].strip()
name= it.xpath('div[2]/h3/span[2]/a/text()')[0].strip()
text= it.xpath('div[2]/p/text()') [0].strip()
# 把img/name/text,分别赋与给imgs/names/texts,并依次装入comments
comments.append({'imgs':img,'names':name,'texts':text})
df= pd.DataFrame(comments) #定义DataFrame对象并赋给df
df.to_excel('D://xwz_fanye.xlsx') #把结果输出为excel,存在D盘
16行代码,2000条内容,是不是很简单呢?
现重点讲解代码中间部分
一:urls
通过翻页,我们发现url中p随之同步变化,所以改变p的数值我们就可以实现翻页,如图:
二:comments
我们抓取了img、name、text需要有序的排列,即采用append函数,依次把他们放入comments。
三:xpath
因为我们要爬取三个内容,且他们都在 li 标签里,所以我们先定位到 li 标签,再用一个for循环分别抓取,如图:
获取img链接采用@src,获取文本采用text()
xpath的具体操作,请参考第一篇哦
总结:
1:实现翻页,一般都是找url的规律,然后运用for循环即可。
2:你会在网上看见各种不同的代码,其实都是一个套路,把本文这个例子看会了,其他的都是大同小异哦。
3:采用requests(获取)——xpath(解析)——pandas(储存)这个模板,一般的网页都可以胜任啦。
下一篇文章,将继续扩大难度,学习获取JS动态内容,抓取豆瓣电影top200,大家可以提前了解HTML静态与JS动态的区别哦。
有不清楚的地方,大家可以留言,点赞,我看到了,会第一时间回复你。
网友评论