爱情公寓电影好不好,评论告诉你。今天我们来用python爬虫获取豆瓣网上爱情公寓的评论。
首先我们分析一下评论的URL规则
https://movie.douban.com/subject/24852545/comments?start=0&limit=20&sort=new_score&status=P
https://movie.douban.com/subject/24852545/comments?start=20&limit=20&sort=new_score&status=P
https://movie.douban.com/subject/24852545/comments?start=40&limit=20&sort=new_score&status=P
发现每页的改变只更改start参数,每页显示20条数据。所以我们更改start参数就可以实现换页面爬数据了。
开始代码
导入requests和lxml。如果没有就去下载
接下来的说明直接在代码段写注释吧。。。。
#导包
from lxml import etree
import requests
#我们提到的start变量,改变start就能换页
start=20
#爱情公寓豆瓣点评
url="https://movie.douban.com/subject/24852545/comments"
#存所有解析后获得数据的集合
movies=[]
#吧网页的评论读取到集合的函数
def moviecomments(text):
#使用etree解析
html = etree.HTML(text)
#使用xpath精确到每一条评论
div=html.xpath("//div[@class='mod-bd']")
list = div[0] if div else None
items = list.xpath(".//div[@class='comment-item']") if list else None
if(items==None): #为空判断,如果为空就退出函数继续运行,防止报错
return
#循环评论、下面是根据网页的规则来获取数据
for item in items:
avatar = item.xpath(".//a/@title")[0]
pingjia = item.xpath(".//span[@class='comment-info']/span[position()=2]/@title")[0]
time = item.xpath(".//span[@class='comment-info']/span[last()]/@title")[0]
content = item.xpath(".//p/span/text()")[0]
#保存到movie中
movie = {
'avatar' : avatar,
'pingjia' : pingjia,
'time' : time,
'content' : content
}
添加到movies集合
movies.append(movie)
#输出一下
print(movie)
#把集合内的数据写到文本
def write_text():
#写出文本的操作
with open("爱情公寓评论.txt","w",encoding="utf-8") as fh:
fh.write("发言人\t评分\t时间\t内容\n")
#遍历集合内的数据,写出
for movie in movies:
pingjia1 = movie.get("pingjia")
if (len(movie.get("pingjia")) > 2):
pingjia1 = "未知"
print(movie.get("avatar") + "\t" + pingjia1 + "\t" + movie.get("time") + "\t" + movie.get("content") + "\n")
fh.write(movie.get("avatar") + "\t" + pingjia1 + "\t" + movie.get("time") + "\t" + movie.get("content") + "\n")
#这是方法的开始
if __name__ == '__main__':
#循环1000,从0-1000,间隔是20
for i in range(0, 1000, 20):
#每次循环对start进行赋值。实现翻页
start=i
# 浏览器的请求头
header = {
'User-Agent': "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Mobile Safari/537.36",
'Referer': "https://movie.douban.com/subject/24852545/comments?start=" + str(
start) + "&limit=20&sort=new_score&status=P"
}
# 请求参数
params = {
'start': str(start),
'limit': "20",
'sort': "new_score",
'status': "P"
}
#在循环里面使用requests发送请求
respone = requests.get(url=url, headers=header, params=params)
#获得respone的字节流
text=respone.text
#调用获取解析数据的函数
moviecomments(text)
#调用写出文本的函数
write_text()
https://download.youkuaiyun.com/download/qq_40335081/10609651
源码地址