爬虫爬取评论数据
1、《唐人街探案3》评论的url:https://movie.douban.com/subject/27619748/comments?start=20&limit=20&status=P&sort=new_score
其中:
①、27619748:该电影的ID;
②、start=20:评论区页面第一页为20,第二页为40,以此类推;
③、limit=20:评论区每页包含二十条评论;
2、获取本地为用户代理User-Agent(简称UA)的方法,使用本地用户代理的目的是为了将本地程序伪装成浏览器,从而达到反“反爬虫”的目的:
①在浏览器中输入:about://version,回车,如下图所示:
②、在浏览器上新建一个空的百度搜索界面,按F12键,进入开发者界面,进入“Network”栏,在左侧百度搜索界面单击“百度搜索”按键,右侧”name“栏选择”www.baidu.com“,然后进入”headers“栏,找到User-Agent,详细如下图所示:
③、本地的User-Agent为:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36
3、使用Xpath解析HTML
想获得评论信息,就需要解析HTML,我们这里用XML文档查询语言Xpath,XPath语法有三大类:
①层级:/ 子节点、// 跳级;
②属性:@ 属性访问;
③函数:contains()、text()等;
语法:选取节点
语法:选取未知节点
详细资料参考:XPath入门(含动图解析)
4、评论地址查询:
在该电影短评界面按F12键,进入开发者界面,按照3及下图的步骤找到评论://div[@id=“comments”]//div[@class=“comment”]//p//text()
5、实现以上过程的代码如下:
import requests
from lxml import etree
header = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'
}
data_path=r'D:\pycharm\comment.txt'
base_url='https://movie.douban.com/subject/27619748/comments?start={}&limit=20&status=P&sort=new_score'
fp=open(data_path,'w',encoding='utf-8')
for i in range(10):
page=i*20
url=base_url.format(page)
response=requests.get(url, headers=header)
comment_path = '//div[@id="comments"]//div[@class="comment"]//p//text()'
root = etree.HTML(response.text)
comment_list = root.xpath(comment_path)
for comment in comment_list:
comment=comment.strip('\n')
#strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
if not comment.isspace():
#str.isspace()函数:检测字符串是否只包含空格,是则返回 True,否则返回 False。
comment = comment + '\n' #'\n':换行分隔符
fp.write(comment)
fp.close()
结果如下
噫,观众普遍不买账嘛