用requests和etree爬取豆瓣电影评论

写在前面的话上一篇文章我们用requests和lxml.etree爬取了豆瓣电影Top250的电影信息,为了能对requests和lxml.etree有更深的理解,下面我们将继续用他们来爬取豆瓣电影的短评

温馨提示 :博主使用的系统为win10,使用的python版本为3.6.5

一、网页分析

首先我们使用chrome浏览器打开某一部电影的评论(这里示例为最近很火的《一出好戏》),我们首先可以判断该网站是一个静态网页,和之前一样我们可以通过构造URL来获取全部网页的内容,但是这次我们尝试使用一种新方法——翻页

使用快捷键 Ctrl+Shift+I 打开Chrome浏览器自带的开发者工具,然后可以使用快捷键 Ctrl+Shift+C 来打开元素选择工具,用鼠标点击网页中的 后页,就会在源代码中自动定位到相应位置,用lxml.etree匹配下一页的链接为 html.xpath(‘//div[@id="paginator"]/a[@class="next"]/@href‘),这样我们就可以通过循环不断获取下一页的内容了

接下来我们需要解析每一页网页的内容以获取我们需要的数据,包括:评论者、赞同人数、评价和评论内容,这里我们使用lxml.etree进行匹配

  • 赞同人数://div[@class="comment-item"]/div[2]/h3/span[1]/span/text()
  • 评论者://div[@class="comment-item"]/div[2]/h3/span[2]/a/text()
  • 评价://div[@class="comment-item"]/div[2]/h3/span[2]/span[2]/@title
  • 评论内容://div[@class="comment-item"]/div[2]/p/span/text()

二、代码实现

import requests
from lxml import etree
import time
import random

class DoubanSpider():
    movieID = ""

    def init(self):
        self.movieID = input(‘请输入电影ID:‘)

    def get_html(self,url):
        headers = {
            ‘USER-AGENT‘:‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36‘
        }
        response = requests.get(url=url,headers=headers)
        return response.text

    def parse_page(self,html):
        html = etree.HTML(html)
        agrees = html.xpath(‘//div[@class="comment-item"]/div[2]/h3/span[1]/span/text()‘)
        authods = html.xpath(‘//div[@class="comment-item"]/div[2]/h3/span[2]/a/text()‘)
        stars = html.xpath(‘//div[@class="comment-item"]/div[2]/h3/span[2]/span[2]/@title‘)
        contents = html.xpath(‘//div[@class="comment-item"]/div[2]/p/span/text()‘)
        result = []
        for i in range(len(agrees)):
            data = {}
            data[‘agree‘] = agrees[i].encode(‘utf-8‘).decode(‘utf-8‘)
            data[‘authod‘] = authods[i].encode(‘utf-8‘).decode(‘utf-8‘)
            data[‘star‘] = stars[i].encode(‘utf-8‘).decode(‘utf-8‘)
            data[‘content‘] = contents[i].encode(‘utf-8‘).decode(‘utf-8‘)
            result.append(data)
        return result

    def parse_link(self,html):
        html = etree.HTML(html)
        base_url = ‘https://movie.douban.com/subject/‘+str(self.movieID)+‘/comments‘
        url = html.xpath(‘//div[@id="paginator"]/a[@class="next"]/@href‘)
        if not url :
            return "END"
        link = base_url + url[0].encode(‘utf-8‘).decode(‘utf-8‘)
        return link

    def crawl(self):
        print(‘Processing‘)
        file = open(‘douban.txt‘,‘w‘,encoding=‘utf-8‘)
        url = ‘https://movie.douban.com/subject/‘ + str(self.movieID) + ‘/comments?start=0&limit=20&sort=new_score&status=P&percent_type=‘
        count = 0
        while True :
            time.sleep(random.random())
            html = self.get_html(url)
            result = self.parse_page(html)
            for item in result:
                count += 1
                print(count)
                file.write(‘--------------------‘+str(count)+‘--------------------\n‘)
                file.write(‘评论者:‘)
                file.write(item[‘authod‘])
                file.write(‘\n‘)
                file.write(‘赞同人数:‘)
                file.write(item[‘agree‘])
                file.write(‘\n‘)
                file.write(‘评价:‘)
                file.write(item[‘star‘])
                file.write(‘\n‘)
                file.write(‘评论内容:‘)
                file.write(item[‘content‘])
                file.write(‘\n‘)
            url = self.parse_link(html)
            if url==‘END‘ :
                break
        file.close()
        print(‘Finished‘)

if __name__ == "__main__":
    spider = DoubanSpider()
    spider.init()
    spider.crawl()

写在后面的话 :通过之前的学习我们已经掌握了静态网页的爬取方法,下一篇文章我们将学习动态网页的爬取,谢谢大家

原文地址:https://www.cnblogs.com/wsmrzx/p/9527087.html

时间: 2024-10-09 06:00:38

用requests和etree爬取豆瓣电影评论的相关文章

python 爬取豆瓣电影评论,并进行词云展示及出现的问题解决办法

本文旨在提供爬取豆瓣电影<我不是药神>评论和词云展示的代码样例 1.分析URL 2.爬取前10页评论 3.进行词云展示 1.分析URL 我不是药神 短评 第一页url https://movie.douban.com/subject/26752088/comments?start=0&limit=20&sort=new_score&status=P 第二页url https://movie.douban.com/subject/26752088/comments?sta

【转】爬取豆瓣电影top250提取电影分类进行数据分析

一.爬取网页,获取需要内容 我们今天要爬取的是豆瓣电影top250页面如下所示: 我们需要的是里面的电影分类,通过查看源代码观察可以分析出我们需要的东西.直接进入主题吧! 知道我们需要的内容在哪里了,接下来就使用我们python强大的request库先获取网页内容下来吧!获取内容后,再使用一个好用的lxml库来分析网页内容,然后获取我们的内容就可以做下一步操作了.先贴出使用request库和lxml分析的代码 1 def get_page(i): 2 url = 'https://movie.d

Python爬虫入门 | 爬取豆瓣电影信息

这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源.看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今天内你就可以迈入爬虫的大门啦~好啦,正式开始我们的第二节课<爬取豆瓣电影信息>吧!啦啦哩啦啦,都看黑板~1. 爬虫原理1.1 爬虫基本原理听了那么多的爬虫,到底什么是爬虫?爬虫又是如何工作的呢?我们先从"爬虫原理"说起.爬虫又称为网页蜘蛛,是一种程序或脚本.但重点在于:它能够按照一定的规则,自动

利用Python爬取豆瓣电影

目标:使用Python爬取豆瓣电影并保存MongoDB数据库中 我们先来看一下通过浏览器的方式来筛选某些特定的电影: 我们把URL来复制出来分析分析: https://movie.douban.com/tag/#/?sort=T&range=0,10&tags=%E7%94%B5%E5%BD%B1,%E7%88%B1%E6%83%85,%E7%BE%8E%E5%9B%BD,%E9%BB%91%E5%B8%AE 有3个字段是非常重要的: 1.sort=T 2.range=0,10 3.tag

Python开发简单爬虫之静态网页抓取篇:爬取“豆瓣电影 Top 250”电影数据

目标:爬取豆瓣电影TOP250的所有电影名称,网址为:https://movie.douban.com/top250 1)确定目标网站的请求头: 打开目标网站,在网页空白处点击鼠标右键,选择"检查".(小编使用的是谷歌浏览器). 点击"network",在弹出页面若长时间没有数据显示,则试一下F5刷新. 可以得到目标网页中Host和User-Agent两项. 2)找到爬取目标数据(即电影名称)在页面中的位置 右键"检查",选择"Elem

基本文件处理-爬取豆瓣电影排行榜

目录 文件的类型 什么是文件? 文件的分类 文件的打开与关闭 文件处理的三个步骤 使用方式 爬虫 requests库的使用 文件的类型 什么是文件? 一堆.py/.txt 存储着文字信息文件, 文件的分类 二进制文件:由0.1组成,例如.png文件 文本文件:由单一特定编码组成的文件,如utf8,例如 .txt文件 文件的打开与关闭 文件处理的三个步骤 打开(找到路径打开) 打开模式 描述 r 只读不可写 w 只写不可读(会清空文件) a 追加不可读 r+ 可读可写 w+ 可读可写(会清空文件)

团队-爬取豆瓣电影TOP250-需求分析

需求:爬取豆瓣电影TOP250 *向用户展示电影的排名,分数,名字,简介,导演,演员,前10条影评信息,链接信息 实现思路: 分析豆瓣电影TOP250的url规则, 编写模块获取相关url 获取全部相关页面的html代码 分析html中有关"排名,分数,名字,简介,导演,演员,前10条影评信息,链接信息"的标签 结合第三方工具包实现信息的提取 编写将"搜集信息"展示出来的模块

团队-Python 爬取豆瓣电影top250-需求分析

需求:爬取豆瓣电影TOP250 *向用户展示电影的排名,分数,名字,简介,导演,演员,前10条影评信息,链接信息 实现思路: 分析豆瓣电影TOP250的url规则, 编写模块获取相关url 获取全部相关页面的html代码 分析html中有关"排名,分数,名字,简介,导演,演员,前10条影评信息,链接信息"的标签 结合第三方工具包实现信息的提取 编写将"搜集信息"展示出来的模块

《团队-爬取豆瓣电影TOP250-成员简介及分工》

团队项目<爬取豆瓣电影TOP250>开发人员之一:张晓亮,性别男,15级软件技术专业学生,喜欢爱书和浏览网页信息.掌握的知识:Java语言开发,熟悉Python,C等开发语言.了解HTML5,CSS3,Javasprict等前端开发知识.可以熟练使用eclipse,Sequel Pro等软件开发工具. 在本次开发中担任:系统分析.对系统功能需求分析.用户体验设计进行归拢.对系统进度的控制,风险评估进有把控和人员的配置等