Scrapy采集“人民的名义”豆瓣评价实验报告

转载请注明出处!!!
实验对象:豆瓣电影--人民的名义
实验目的:通过使用scrapy框架采集“人民的名义”评价内容,进一步体会信息检索的过程。
实验过程:分析采集实体->确定采集方法->制定爬取规则->编写代码并调试->得到数据

人民的名义

ps:由于最近豆瓣发布的 Api V2测试版 需要授权 走oauth2,但是现在不开放key申请,所以直接爬了网页。
---------------------------------欢迎纠错和提问!24小时在线不打烊!!---------------------


目录
  1. 分析采集实体
  2. 确定采集方法
  3. 制定爬取规则
  4. 编写代码并调试
  5. 得到数据
  6. 使用分词工具包进行数据分析
  7. 总结和感悟

1. 分析采集实体

当前页面中,评价相关的内容有很多,我们通过分析选取更具代表性的数据进行采集。

1.1 IMDb (备用)

豆瓣提供了IMDB的链接。

imdb链接

IMDb只提供了5条英文评价

IMDb reviews

记录网址备用:http://www.imdb.com/user/ur70913446/comments?ref_=tt_urv

1.2 全部评价(不采集)


这里指向了全部评价,没有分类,不考虑

total reviews

1.3 分集短评(不采集)

这里提供了分集短评,不具代表性,不考虑

1.4 全部短评(采集部分)

这里提供了人民的名义的全部短评,考虑采集看过/热门的前50条

短评

1.5 全部剧评(采集部分)

人民的名义的剧评考虑采集最受欢迎的前50条

1.6 确定采集实体

豆瓣提供了部分xml格式的影评


douban feed:rss
douban xml

采集的内容很全面,参考该官方示例确定采集实体

  • title(剧评)
  • description
  • star
  • creator
  • pubDate

2. 确定采集方法

2.1短评采集

start_urls:https://movie.douban.com/subject/26727273/comments?status=P
内容:当前页内采集

分页:【后页】跳转下一页


2.2剧评采集

start_urls:https://movie.douban.com/subject/26727273/reviews
内容:完整评价在当前页面可以爬取

显示部分

显示全部

隐藏状态
显示状态

可以看出,页面通过js控制改变class来控制内容的显示隐藏和ajax动态赋值。

3. 制定爬取规则

3.1 短评规则

3.1.1 description
description
div#comments div.comment-item div.comment p::text
3.1.2 star
stars
div#comments div.comment-item div.comment h3 span.comment-info span.rating::attr(title)
3.1.3 creator
creator
 div#comments div.comment-item div.comment h3 span.comment-info a::attr(href)
3.1.4 pubDate
pubDate
div#comments div.comment-item div.comment h3 span.comment-info span.comment-time::text
3.1.5 next_page
nextpage
div#paginator a.next::attr(href)

3.2 剧评规则

3.2.1 title
3.2.2 description
3.2.3 star
3.2.4 creator
3.2.5 pubDate
3.2.6 next_page

4. 编写代码并调试

4.1 爬取短评

新建工程douban


编写items.py

import scrapy


class DoubanItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()
    description = scrapy.Field()
    star = scrapy.Field()
    creator = scrapy.Field()
    pubDate = scrapy.Field()

编写my_short.py

import scrapy

from douban.items import DoubanItem

class MyShortSpider(scrapy.Spider):
    name = "my_short"
    allowed_domains = ["douban.com"]
    start_urls = [
        'https://movie.douban.com/subject/26727273/comments?status=P',
    ]

    def parse(self, response):
        for comment in response.css('div#comments div.comment-item div.comment'):
            item = DoubanItem()
            item['description'] = comment.css('p::text').extract_first(),
            item['star'] = comment.css('h3 span.comment-info span.rating::attr(title)').extract_first(),
            item['creator'] = comment.css('h3 span.comment-info a::attr(href)').extract_first(),
            item['pubDate'] = comment.css('h3 span.comment-info span.comment-time::text').extract_first(),
            yield item

            next_page = response.css('div#paginator a.next::attr(href)')
            if next_page is not None:
                next_urls = response.urljoin(next_page.extract_first())
                yield scrapy.Request(next_urls,callback = self.parse)

403爬取失败



可选方案:

  • 动态设置user-agent
  • 禁用cookies
  • 设置延迟下载
  • 使用Google cache
  • 使用代理ip
  • 使用crawlera

scrapy cloud--crawlera的尝试

登录scrapy cloud创建自己的工程并获取key

api-key

在自己的服务器安装crawlera


install crawlera
修改settings.py:

找到settings.py文件


tree

添加crawler代理


添加代理

配置并填写自己的key
pass字段不用填写

如果你的spider中保留了cookie,在header中添加


header

407 错误如下:



安装shub
install shub

用自己的key登录shub

shub login

上传工程

shub deploy

运行之后还是407


run

说好的免费现在好像是收费了。。弃坑

使用代理ip

在经历了403 503 111 400 等一系列错误码之后,又尝试了许多代理ip,终于爬到了数据。

data

然而没过多久就又挂了...

总算是可以爬到数据了,只要及时更换代理ip就没有问题。
修改后的settings.py代码
是否遵循robots.txt

robots obey

设置下载延迟时间
download delay

不保存cookie
cookie

这是中间件middlewares的一个函数,543是随便写的,只要不重复就可以
downloader middlewares

user-agent包头可以在chrome开发者工具获取到
user agent

chrome

在middlewares.py增加如下代码
middlewares.py

其中,引号中的url是代理ip
国内高匿代理IP
西刺免费代理IP
但是这样依然会在爬到一半的时候挂
更好的方法是放一组代理ip,在爬到一半的时候接上继续爬

5. 得到数据

某一次爬到数据180条

部分xml数据展示


xml

6. 使用分词工具包进行数据分析

7. 总结和感悟

未完待续。
参考链接:
如何让你的scrapy爬虫不再被ban
scrapy爬虫代理——利用crawlera神器,无需再寻找代理IP

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容