Python使用lxml抓取豆瓣书评

今天学习用Python三大爬虫利器之一,lxml抓取豆瓣书评,本来想抓取煎蛋上的妹子图,由于煎蛋设置了反爬虫机制,无奈转而抓取豆瓣书评作为练手

首先我们找到一个书评地址

https://book.douban.com/subject/1084336/comments/hot?p=1

我们进入这个地址看看用开发者控制台看看网站的结构

使用控制台查看网站目录结构

按F12打开控制台,对着评论处审查元素,找到位置

image

找到位置后开始写代码

import requests
from lxml import etree

#我们邀抓取的页面链接
url='https://book.douban.com/subject/1084336/comments/'

#用requests库的get方法下载网页
r=requests.get(url).text

#解析网页并且定位短评
s = etree.HTML(r)
file1 = s.xpath('//*[@id="comments"]/ul/li/div[2]/p/text()')
file2 = s.xpath('//*[@id="comments"]/ul/li/div[2]/h3/span[2]/a/text()')

#list 拼接
i = 0
s = {}
while(i < len(file1)):
dit = {file1[i]:file2[i]}
s.update(dit)
i+=1

#打印抓取的信息
for value,key in s.items():
print('ID:',key,' ','评论:',value)
print('--------------------------------------------------------\n')

查看结果

image

好开心,拿到了数据。可是,如果我想获取更多的数据怎么办?

代码改进 增加自动翻页

首先我们翻一页,注意网址的变化

image

可以看到,后面的P参数由1变成了2,再翻一页变成了3,所以我们可以遍历完第一页后自动翻页循环遍历获取更多的数据,下面,我们来做个抓取前二十页的测试,贴出完整代码

import requests
from lxml import etree

def pc(url):
#用requests库的get方法下载网页
r = requests.get(url).text
#解析网页并且定位短评
s = etree.HTML(r)
ID = s.xpath('//*[@id="comments"]/ul/li/div[2]/p/text()')
Content = s.xpath('//*[@id="comments"]/ul/li/div[2]/h3/span[2]/a/text()')
# list 拼接
i = 0
s = {}
while(i < len(ID)):
dit = {ID[i]:Content[i]}
s.update(dit)
i+=1
return s

i = 1
# 抓取前二十页的数据
while(i <= 20):
#我们邀抓取的页面链接
url='https://book.douban.com/subject/1084336/comments/hot?p='+str(i)
s = pc(url)
#打印抓取的信息
for value,key in s.items():

print('ID:',key,' ','评论:',value)
print('--------------------------------------------------\n')


print('第',str(i),'页','-------','翻页')
i += 1

最终运行结果

image



本文标题:Python使用lxml抓取豆瓣书评

文章作者:Kebin.Wang

发布时间:2018年06月15日 - 00:06

原始链接:https://yyping.top/python_02/

许可协议: 署名-非商业性使用-禁止演绎 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!

分享到: