敦刻尔克豆瓣短评爬虫

开始准备步骤

  1. 进入豆瓣电影首页。
  2. 在搜索框中搜索“敦刻尔克”
  3. 下拉找到短评所在位置,就是”全部xx条”那个位置,点击进去。
  4. 进入敦刻尔克短评页面。注意观察页面链接。
  5. 点击进入后一页,把相应页面链接复制到本地的新建txt文本中。
  6. 观察比较不同链接之间的不同之处,发现只有”start=”后数字发生变化。
  7. 思考变化规律。当然这里有很多方法,我选的是最简单的却最实用的。把所有变化的量复制下来放进一个列表中。

图片演示

image
image
image
image

爬短评准备

  1. 找到短评所在位置。(在短评处右键点击检查)
  2. 观察短评正文标签元素所在位置,并向上寻找包含所有短评的标签元素所在位置。

图片演示

image
image

代码及其说明

#!/usr/bin/python
# -*-coding:utf-8-*-
import time
import requests
from bs4 import BeautifulSoup

def douban_comment():
    # 拆分短评链接
    baseurl = "https://movie.douban.com/subject/26607693/comments?"
    lasturl = '&limit=20&sort=new_score&status=P'

    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.13 Safari/537.36",
             }

    try:
        flag = 0 #初始化
        P = [0,20,63,85,106,127,147,169,191] # 链接中变化量,42页有问题
        for i in range(len(P)): # 遍历列表
            Page = P[i]     # 按索引赋值
            # print(Page)     # 这里可以验证上面说的,你可以在P列表里上42试试再运行,你会发现它会停在爬42那页。
            totalurl = baseurl + 'start=' + str(Page) + lasturl   # 组合构造成《敦刻尔克》短评完整URL
            r = requests.get(totalurl, headers=header)      # 加上Header更不易被识别为爬虫
            r.raise_for_status()                            # 抛出异常
            r.encoding = r.apparent_encoding                # 让编码符合豆瓣的编码
            soup = BeautifulSoup(r.text, "lxml")
            content = soup.body.find('div', {'class': 'mod-bd','id':'comments'}).find_all('p', {'class': ""}) # 找到短评对应位置,保存返回结果的content是个列表
            for co in content:                # 遍历content列表
                Content = co.string           # 取出其中字符串
                if Content is not None:       # 判断取出的字符串是否为空值
                    # 保存在自己指定位置
                    with open('E:/DataCenter/Desktop/Comment.txt', 'a+') as f: # 注意这里用的是追加的方式写入
                        flag += 1            # 抓到评论(非None)后,累加计数
                        print("正在爬取{0}".format(flag))          #显示正在爬取第几条评论
                        f.write("{0} {1}".format(flag, Content))
    except:
        print('')

if __name__ == '__main__':
    douban_comment()
    time.sleep(1)  # 控制爬取速度
  • 友情提醒:header 和保存位置改成自己的。
  • 爬完后会在你指定的目录下生成Comment.txt文件。

效果展示

image

Enjoy it ? Donate me ! 欣赏此文?求鼓励,求支持!
显示 Gitment 评论