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

最新文章

  1. Linux下查看chm文件
  2. 九幽2015年Q3 WP市场份额细分报告
  3. 国内YUM源收集
  4. jquery控制css的display(控制元素的显示与隐藏)
  5. 射频识别技术漫谈(5)——防冲突【worldsing 笔记】
  6. DSP开发资源总结,经典书籍,论坛
  7. android入门——UI(1)
  8. ASP.NET Session丢失问题原因及解决方案
  9. Cocos2d-x 的“HelloWorld” 深入分析
  10. 关于连接数据库的T-SQL语句中的一种小技巧
  11. 3D图片变换
  12. poj 2888 Magic Bracelet(Polya+矩阵快速幂)
  13. Cs231n-assignment 2作业笔记
  14. ThreadPoolExecutor线程池详解
  15. 【Luogu4723】线性递推(常系数齐次线性递推)
  16. QString 和char数组转换(转)
  17. Linux下编译、安装php
  18. ubuntu16.04 能启动mysql服务
  19. Problem D: 统计元音字母数
  20. 谷歌扩展程序--------------Message

热门文章

  1. Ronco创投原则 - 硅谷创业教父Paul Graham文摘
  2. ASP.NET 5:初始化数据库
  3. grunt的基本概念和使用
  4. 《C语言及程序设计初步》网络课程主页
  5. 笔试题&面试题:CW输出矩阵
  6. RPL协议介绍
  7. Rails当你运行一个数据库回滚错误:ActiveRecord::IrreversibleMigration exception
  8. 【蜗牛—漫漫IT路之大学篇(九) 】
  9. ComponentName意思
  10. oledb快速导入Excel案例