python3爬虫教学:爱情公寓电影评论

本文介绍了一个简单的Python爬虫项目,用于抓取豆瓣网站上《爱情公寓》电影的用户评论。通过分析评论页面的URL规律,利用requests和lxml.etree实现了对指定电影评论数据的抓取,并将获取的数据保存为文本文件。

戳我爱情公寓电影评论地址

爱情公寓电影好不好,评论告诉你。今天我们来用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
源码地址

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值