Scrapy 通过登录的方式爬取豆瓣影评数据
Scrapy 通过登录的方式爬取豆瓣影评数据
由于需要爬取影评数据在来做分析,就选择了豆瓣影评来抓取数据,工具使用的是Scrapy工具来实现。scrapy工具使用起来比较简单,主要分为以下几步:
1、创建一个项目 ==scrapy startproject Douban
得到一个项目目录如下:
├── Douban
│ ├── init.py
│ ├── items.py
│ ├── pipelines.py
│ ├── settings.py
│ └── spiders
│ └── init.py
└── scrapy.cfg2 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部分,发现了可以使用如下方式实现登录:
- class MySpider(scrapy.Spider):
- name = 'myspider'
- def start_requests(self):
- return [scrapy.FormRequest("http://www.example.com/login",
- formdata={'user': 'john', 'pass': 'secret'},
- callback=self.logged_in)]
- def logged_in(self, response):
- # here you would extract links to follow and return Requests for
- # each of them, with another callback
- pass
通过上面的方法,就可以实现登录豆瓣爬取想要的数据了。
** 本篇笔记初略的记录了如何登录豆瓣爬取数据。
下面试自己写的spider/Doubanspider.py的代码,仅供参考:
- # -*- coding: utf-8 -*-
- import scrapy
- from scrapy.selector import Selector
- from Douban.items import DoubanItem
- class Doubanspider(scrapy.Spider):
- # 定义爬虫的名字
- name = "doubanmovie"
- allowed_domains = ["douban.com"]
- # 初始化url
- # start_urls = (
- # 'https://movie.douban.com/subject/26266072/comments',
- # )
- def start_requests(self):
- # print u'开始'
- return [scrapy.FormRequest('https://www.douban.com/login',
- formdata={'form_email': 'your username', 'form_password': 'your password'}, callback = self.logged_in)]
- def logged_in(self, response):
- # 登陆完成之后开始爬取数据
- # print u'成功?'
- yield Request('https://movie.douban.com/subject/26266072/comments', callback = self.parse)
- # 定义解析的方法
- def parse(self, response):
- # print u'爬取'
- sel = Selector(response)
- self.log("Hi, this is an item page! %s" % response.url)
- item = DoubanItem()
- # 每条短评的xpath
- item['comment'] = sel.xpath('//div[@class = "comment"]/p[@class = ""]/text()[1]').extract()
- # 每个评分的xpath
- item['grade'] = sel.xpath('//div[@class = "comment"]/h3/span[@class = "comment-info"]/span[contains(@class,"allstar")]/@title').extract()
- yield item
- # 下一页的xpath, 如有,则又发出新的请求
- next_page = '//div[@id = "paginator"]/a[@class="next"]/@href'
- if response.xpath(next_page):
- url_nextpage = 'https://movie.douban.com/subject/26266072/comments' + response.xpath(next_page).extract()[0]
- request = Request(url_nextpage, callback = self.parse)
- yield request
items.py的定义如下:
- import scrapy
- class DoubanItem(scrapy.Item):
- # define the fields for your item here like:
- # name = scrapy.Field()
- comment = scrapy.Field()
- grade = scrapy.Field()
再在setting里面设置好,就可以爬取数据了!
2016.8.30
Fly
Scrapy 通过登录的方式爬取豆瓣影评数据的更多相关文章
- 【python数据挖掘】爬取豆瓣影评数据
概述: 爬取豆瓣影评数据步骤: 1.获取网页请求 2.解析获取的网页 3.提速数据 4.保存文件 源代码: # 1.导入需要的库 import urllib.request from bs4 impo ...
- [超详细] Python3爬取豆瓣影评、去停用词、词云图、评论关键词绘图处理
爬取豆瓣电影<大侦探皮卡丘>的影评,并做词云图和关键词绘图第一步:找到评论的网页url.https://movie.douban.com/subject/26835471/comments ...
- Python3.5爬取豆瓣电视剧数据并且同步到mysql中
#!/usr/local/bin/python # -*- coding: utf-8 -*- # Python: 3.5 # Author: zhenghai.zhang@xxx.com # Pro ...
- python系列之(3)爬取豆瓣图书数据
上次介绍了beautifulsoup的使用,那就来进行运用下吧.本篇将主要介绍通过爬取豆瓣图书的信息,存储到sqlite数据库进行分析. 1.sqlite SQLite是一个进程内的库,实现了自给自足 ...
- python爬虫-爬取豆瓣电影数据
#!/usr/bin/python# coding=utf-8# 作者 :Y0010026# 创建时间 :2018/12/16 16:27# 文件 :spider_05.py# IDE :PyChar ...
- Python爬虫之抓取豆瓣影评数据
脚本功能: 1.访问豆瓣最受欢迎影评页面(http://movie.douban.com/review/best/?start=0),抓取所有影评数据中的标题.作者.影片以及影评信息 2.将抓取的信息 ...
- Scrapy爬虫(4)爬取豆瓣电影Top250图片
在用Python的urllib和BeautifulSoup写过了很多爬虫之后,本人决定尝试著名的Python爬虫框架--Scrapy. 本次分享将详细讲述如何利用Scrapy来下载豆瓣电影To ...
- Scrapy爬取豆瓣图书数据并写入MySQL
项目地址 BookSpider 介绍 本篇涉及的内容主要是获取分类下的所有图书数据,并写入MySQL 准备 Python3.6.Scrapy.Twisted.MySQLdb等 演示 代码 一.创建项目 ...
- selenium自动化方式爬取豆瓣热门电影
爬取的代码如下: from selenium import webdriver from bs4 import BeautifulSoup import time #发送请求,获取响应 def get ...
随机推荐
- Google Summer of Code 建议被接收的5个技巧
Google Summer of Code 建议被接收的5个技巧 本文翻译自:http://www.di.ens.fr/~baghdadi/TXT_blog/5_advices_to_get_your ...
- php 解析xml 的四种方法
XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument. ...
- 增加 Java 有几个好习惯表现
以下是一些参考网络资源中的摘要Java编程在一些地方尽可能做. 1. 尝试使用单个例如在合适的场合 使用单例可以减轻负荷的负担,缩短加载时间.提高装载效率,但并不是所有的地方都适合一个案例.简单的说, ...
- QT自动补全设置
在工具 -> 选项 -> 环境 -> 键盘 中,找到TextEditor -> CompleteThis,修改后面的快捷键就好了 我将它修改为Alt + /
- jQuery小例
jQuery小例子 使用前,请先引用jquery 1,map遍历数组 2,jQuery对象与DOM对象才做元素和互转 3,prevall与nextall 4,jquery版的星星评分控件 5,jq ...
- solr的配置文件及其含义
solr与.net系列课程(二)solr的配置文件及其含义 solr与.net系列课程(二)solr的配置文件及其含义 本节内容还是不会涉及到.net与数据库的内容,但是不要着急,这都是学时s ...
- SQL远程恢复
原文:SQL远程恢复 -- ============================================= -- Author: dcrenl -- Create date: 2013-9 ...
- Linux环境下搭建php开发环境的操作步骤
本文主要记载了通过编译方式进行软件/开发环境的安装过程,其他安装方式忽略! 文章背景: 因为php和Apache等采用编译安装方式进行安装,然而编译安装方式,需要c,c++编译环境, 通过apt方式安 ...
- IP地址规划和设计方法
IP地址规划和设计方法 无类域间路由技术需要在提高 IP 地址利用率和减少主干路由器负荷两个方面取得平衡 网络地址转换 NAT 最主要的应用是专用网,虚拟专用网,以及 ISP 为拨号用户 提供的服务 ...
- mass种子模块之domready
总结:由于IE6/7/8不支持DOMContentLoaded事件,虽然它支持onreadystatechange事件,但是readyState=complete几乎和onload事件一样,需要等页面 ...