Scrapy 通过登录的方式爬取豆瓣影评数据

爬虫
Scrapy
豆瓣
Fly

由于需要爬取影评数据在来做分析,就选择了豆瓣影评来抓取数据,工具使用的是Scrapy工具来实现。scrapy工具使用起来比较简单,主要分为以下几步:

1、创建一个项目 ==scrapy startproject Douban

  • 得到一个项目目录如下:

    ├── Douban
    │   ├── init.py
    │   ├── items.py
    │   ├── pipelines.py
    │   ├── settings.py
    │   └── spiders
    │   └── init.py
    └── scrapy.cfg

    2 directories, 6 files

  • 然后定义一个Item项
    定义Item项,主要是为了方便得到爬取得内容。(根据个人需要定义吧,不定义也可以。)

  • 定义一个爬虫类
    由上面的目录上,知道放在spider下面。可以根据不同的需要继承 scrapy.Spider 或者是CrawlSpider。然后定义url以及parse方法
    当然也可以使用命令来生成模板scrapy genspider douban douban.com

  • 抓取内容
    使用命令 scrapy crawl spidername

具体可以参照Scrapy手册(scrapy tutorial)

通过scrapy 参考手册的程序定义之后,会发现在爬不到数据,这是因为豆瓣使用了反爬虫机制。我们可以在setting.py内启动DOWNLOAD_DELAY=3 以及User-Agent代理:USER_AGENT = 'Douban (+http://www.douban.com)'

这样就可以开启爬虫了。
但是在爬取豆瓣影评数据的时候,会发现,最多只能爬取10页,然后豆瓣就需要你登录。不然就只能爬取10页数据(从浏览去看,也是只能看到10页数据)。

这就需要我们登录之后再去爬取数据了。
然后在Scrapy手册的Spider部分,发现了可以使用如下方式实现登录:

  1. class MySpider(scrapy.Spider): 

  2. name = 'myspider' 


  3. def start_requests(self): 

  4. return [scrapy.FormRequest("http://www.example.com/login", 

  5. formdata={'user': 'john', 'pass': 'secret'}, 

  6. callback=self.logged_in)] 


  7. def logged_in(self, response): 

  8. # here you would extract links to follow and return Requests for 

  9. # each of them, with another callback 

  10. pass 

通过上面的方法,就可以实现登录豆瓣爬取想要的数据了。

** 本篇笔记初略的记录了如何登录豆瓣爬取数据。


下面试自己写的spider/Doubanspider.py的代码,仅供参考:

  1. # -*- coding: utf-8 -*- 


  2. import scrapy 

  3. from scrapy.selector import Selector 

  4. from Douban.items import DoubanItem 


  5. class Doubanspider(scrapy.Spider): 

  6. # 定义爬虫的名字 

  7. name = "doubanmovie" 

  8. allowed_domains = ["douban.com"] 


  9. # 初始化url 

  10. # start_urls = ( 

  11. # 'https://movie.douban.com/subject/26266072/comments', 

  12. # ) 


  13. def start_requests(self): 

  14. # print u'开始' 

  15. return [scrapy.FormRequest('https://www.douban.com/login', 

  16. formdata={'form_email': 'your username', 'form_password': 'your password'}, callback = self.logged_in)] 


  17. def logged_in(self, response): 

  18. # 登陆完成之后开始爬取数据 

  19. # print u'成功?' 

  20. yield Request('https://movie.douban.com/subject/26266072/comments', callback = self.parse) 


  21. # 定义解析的方法 

  22. def parse(self, response): 

  23. # print u'爬取' 

  24. sel = Selector(response) 

  25. self.log("Hi, this is an item page! %s" % response.url) 

  26. item = DoubanItem() 


  27. # 每条短评的xpath 

  28. item['comment'] = sel.xpath('//div[@class = "comment"]/p[@class = ""]/text()[1]').extract() 

  29. # 每个评分的xpath 

  30. item['grade'] = sel.xpath('//div[@class = "comment"]/h3/span[@class = "comment-info"]/span[contains(@class,"allstar")]/@title').extract() 


  31. yield item 


  32. # 下一页的xpath, 如有,则又发出新的请求 

  33. next_page = '//div[@id = "paginator"]/a[@class="next"]/@href' 


  34. if response.xpath(next_page): 

  35. url_nextpage = 'https://movie.douban.com/subject/26266072/comments' + response.xpath(next_page).extract()[0] 

  36. request = Request(url_nextpage, callback = self.parse) 

  37. yield request 


items.py的定义如下:

  1. import scrapy 


  2. class DoubanItem(scrapy.Item): 

  3. # define the fields for your item here like: 

  4. # name = scrapy.Field() 

  5. comment = scrapy.Field() 

  6. grade = scrapy.Field() 


再在setting里面设置好,就可以爬取数据了!


2016.8.30
Fly

Scrapy 通过登录的方式爬取豆瓣影评数据的更多相关文章

  1. 【python数据挖掘】爬取豆瓣影评数据

    概述: 爬取豆瓣影评数据步骤: 1.获取网页请求 2.解析获取的网页 3.提速数据 4.保存文件 源代码: # 1.导入需要的库 import urllib.request from bs4 impo ...

  2. [超详细] Python3爬取豆瓣影评、去停用词、词云图、评论关键词绘图处理

    爬取豆瓣电影<大侦探皮卡丘>的影评,并做词云图和关键词绘图第一步:找到评论的网页url.https://movie.douban.com/subject/26835471/comments ...

  3. Python3.5爬取豆瓣电视剧数据并且同步到mysql中

    #!/usr/local/bin/python # -*- coding: utf-8 -*- # Python: 3.5 # Author: zhenghai.zhang@xxx.com # Pro ...

  4. python系列之(3)爬取豆瓣图书数据

    上次介绍了beautifulsoup的使用,那就来进行运用下吧.本篇将主要介绍通过爬取豆瓣图书的信息,存储到sqlite数据库进行分析. 1.sqlite SQLite是一个进程内的库,实现了自给自足 ...

  5. python爬虫-爬取豆瓣电影数据

    #!/usr/bin/python# coding=utf-8# 作者 :Y0010026# 创建时间 :2018/12/16 16:27# 文件 :spider_05.py# IDE :PyChar ...

  6. Python爬虫之抓取豆瓣影评数据

    脚本功能: 1.访问豆瓣最受欢迎影评页面(http://movie.douban.com/review/best/?start=0),抓取所有影评数据中的标题.作者.影片以及影评信息 2.将抓取的信息 ...

  7. Scrapy爬虫(4)爬取豆瓣电影Top250图片

      在用Python的urllib和BeautifulSoup写过了很多爬虫之后,本人决定尝试著名的Python爬虫框架--Scrapy.   本次分享将详细讲述如何利用Scrapy来下载豆瓣电影To ...

  8. Scrapy爬取豆瓣图书数据并写入MySQL

    项目地址 BookSpider 介绍 本篇涉及的内容主要是获取分类下的所有图书数据,并写入MySQL 准备 Python3.6.Scrapy.Twisted.MySQLdb等 演示 代码 一.创建项目 ...

  9. selenium自动化方式爬取豆瓣热门电影

    爬取的代码如下: from selenium import webdriver from bs4 import BeautifulSoup import time #发送请求,获取响应 def get ...

随机推荐

  1. GCD &amp;&amp; Run Loops学习笔记

    1.GCD 使用不同优先级的若干个队列乍听起来非常直接,只是,我们强烈建议,在绝大多数情况下使用默认的优先级队列就能够了.假设运行的任务须要訪问一些共享的资源,那么在不同优先级的队列中调度这些任务非常 ...

  2. linux 编译java并打包

    一.首先是编译简单java文件(不引用外部jar包)如test.java public class test(){ System.out.println("hello world!" ...

  3. Excel基于POI导入导出的Annotation化之路(一)

    Excel在web项目里的使用变得越来越广泛,特别是和线下耦合度较高的业务,Excel导入导出变得非常频繁,尽管很多人写了诸多的工具方法,但是终究没有解决一个问题:有效的控制字段英文名称和实际表头名称 ...

  4. leetcode[158] Read N Characters Given Read4 II - Call multiple times

    想了好一会才看懂题目意思,应该是: 这里指的可以调用更多次,是指对一个文件多次操作,也就是对于一个case进行多次的readn操作.上一题是只进行一次reandn,所以每次返回的是文件的长度或者是n, ...

  5. python进程池剖析(三)

    之前文章对python中进程池的原理.数据流以及应用从代码角度做了简单的剖析,现在让我们回头看看标准库中对进程池的实现都有哪些值得我们学习的地方.我们知道,进程池内部由多个线程互相协作,向客户端提供可 ...

  6. 数据访问层的改进以及测试DOM的发布

    数据访问层的改进以及测试DOM的发布 在上一篇我们在宏观概要上对DAL层进行了封装与抽象.我们的目的主要有两个:第一,解除BLL层对DAL层的依赖,这一点我们通过定义接口做到了:第二,使我们的DAL层 ...

  7. Extension Objects(扩展对象)

    设计模式之美:Extension Objects(扩展对象)   索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):使用示例结构实现 Extension Objects. 实现方 ...

  8. android判断网络的类型

    转自:http://blog.csdn.net/xxxsz/article/details/8199031 判断网络类型是wifi,还是3G,还是2G网络 对不同的网络进行不同的处理,现将判断方法整理 ...

  9. Roslyn and NRefactory

    1.Roslyn: 微软今天(2012-06-06)向CTP社区发布了Roslyn编译器的最新版本,它主要用于Visual Basic和C#代码,可工作于Visual Studio 2010 SP1和 ...

  10. linux时间校准设置,解决与本地时间不一致问题

    时间安装脚本   从NTP上把时间同步到本地 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 更新本地时间 ntpdate us.pool.nt ...