Python爬虫初接触(六)

系统 1345 0

这篇博客做一个爬虫的实例

今天刚看到一个新闻,在7月26日上映的《哪吒之魔童降世》,密钥第二次延期至10月26日。
截止至9月17日,《哪吒之魔童降世》票房已超49亿票房,在豆瓣上对该电影的评价有好有坏。说实话,博主看了这个电影真的觉得蛮不错的,因此把短评中的差评爬取下来,看下差评包括哪些方面。

目录

      • 一、BeautifulSoup
      • 二、xpath
      • 三、正则表达式

一、BeautifulSoup

首先需要了解下差评文字内容在哪些标签下:

进入豆瓣该电影短评界面,检查元素:
Python爬虫初接触(六)_第1张图片
Python爬虫初接触(六)_第2张图片
可以看出,每一条评论都在一个

标签下,具体的文字内容,在
标签下

标签下 标签里。

于是就有了爬取的思路:

  1. 找到所有的 class=short 的span标签
  2. 爬取文字内容
  3. 翻页
    Python爬虫初接触(六)_第3张图片

(一)导入需要用到的模块与包

              
                import requests
from bs4 import BeautifulSoup
import time

              
            

(二)获取差评内容
先爬取一页看下效果

              
                base_url = 'https://movie.douban.com/subject/26794435/comments?start=0&limit=20&sort=new_score&status=P&percent_type=l'

def get_one_pageComments(html):
    soup = BeautifulSoup(html.content, 'lxml')
    # 可以在这里print下html.content看是否需要添加ua或者cookie爬取
    commentsList = soup.find_all('span',class_='short')
    pageComments = ""
    for commentTag in commentsList:
            pageComments += commentTag.text
    print(pageComments)


html = requests.get(url)


get_one_pageComments(html)

              
            

Python爬虫初接触(六)_第4张图片
与原网页对比下:
Python爬虫初接触(六)_第5张图片
说明成功爬取到了差评内容

(三)翻页
接下来进行翻页处理,先对比下前三页的url:
在这里插入图片描述
发现每翻一页 start 的值就加20。翻页功能就可以实现了

              
                base_url = 'https://movie.douban.com/subject/26794435/comments?start={}&limit=20&sort=new_score&status=P&percent_type=l'
for x in range(0, 81, 20):
    url = base_url.format(x)
    print(url)

              
            

Python爬虫初接触(六)_第6张图片

综合以上所述,整个流程的代码实现就完成了:

              
                base_url = 'https://movie.douban.com/subject/26794435/comments?start={}&limit=20&sort=new_score&status=P&percent_type=l'

def get_one_pageComments(html):
    soup = BeautifulSoup(html.content, 'lxml')
    commentsList = soup.find_all('span',class_='short')
    pageComments = ""
    for commentTag in commentsList:
            pageComments += commentTag.text
    print(pageComments)

for x in range(0,81, 20):
# 爬取前4页
    url = base_url.format(x)
    html = requests.get(url)
    get_one_pageComments(html)
    time.sleep(1)

              
            

time.sleep 是避免被识别出在爬取的一个措施。

Python爬虫初接触(六)_第7张图片
这样,就完成了对该电影差评的爬取。

二、xpath

其实绝大部分都是一样的,不同之处在于如何定位到差评文本内容。
Python爬虫初接触(六)_第8张图片

由于每条差评都在一个

中,而所有的
都在

因此,首先要定位到
,其次定位
,然后定位

,接着定位 ,最后定位 text()

思路清晰了,接下来就是代码的实现了:

                
                  import requests
from lxml import etree

def get_text(url):
    resp = requests.get(url).content.decode('utf-8')
    html = etree.HTML(resp)
    divs = html.xpath('//div[@class="mod-bd"]/div')
    # print(divs)
    for div in divs:
        pl = div.xpath('//div[@class="comment"]/p/span/text()')
        print(pl)

base_url = 'https://movie.douban.com/subject/26794435/comments?start={}&limit=20&sort=new_score&status=P&percent_type=l'
for x in range(0, 81, 20):
    url = base_url.format(x)
    get_text(url)

                
              

爬取后的结果:
Python爬虫初接触(六)_第9张图片

三、正则表达式

用正则表达式去匹配一定要记住下面三个非常非常常用且作用十分的匹配式:

  1. .+? 代表所有字符
  2. re.VERBOSE 代表正则表达式的注释
  3. re.DOTALL 代表.可以匹配所有字符,包括换行符

Python爬虫初接触(六)_第10张图片
我们要爬取所有的差评内容,即要找到所有的


然后去定位

Python爬虫初接触(六)_第11张图片

虽然分别用BeautifulSoup、Xpath、正则表达式基本实现了对差评内容的爬取,但是不足之处在于没有对爬取到的str进行保存,是因为博主在保存时总是报错。。还没有找到合适的解决办法,后续会进行完善。


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论