使用scrapy爬取豆瓣上面《战狼2》影评
这几天一直在学习scrapy框架,刚好学到了CrawlSpider和Rule的搭配使用,就想着要搞点事情练练手!!!
信息提取
算了,由于爬虫运行了好几次,太过分了,被封IP了,就不具体分析了,附上《战狼2》豆瓣影评页面链接:https://movie.douban.com/subject/26363254/reviews
抓包
影评页面是分页的,为了爬取到更多条影评,用Chrome抓包分析请求发现,其实上面的网址可以是这样的:https://movie.douban.com/subject/26363254/reviews?start=0
这下明了了,URL最后的"start=0"就是我们搞更大的事情要用的东西了,先放着。
准备工作
- pymysql驱动(pip安装就行了)
- mysql数据库
- scrapy
开搞
创建一个scrapy项目
选择一个自己中意的目录,在终端打开,输入一下命令:
scrapy startproject douban
这样就创建成功了,我使用Pycharm打开的项目,项目目录结构大概就是这样:
关于各个文件和文件夹有什么用,请自行百度,或者阅读scrapy官方文档
代码实现
items.py
因为只是练个手,就不爬太多东西了!
# items.py
import scrapy
class DoubanItem(scrapy.Item):
title=scrapy.Field()
author=scrapy.Field()
time=scrapy.Field()
link=scrapy.Field()
- title : 题目
- author : 影评作者
- time : 影评发布时间
- link : 影评链接
doubanspider.py
爬虫核心代码
# doubanspider.py
from scrapy.spider import CrawlSpider,Rule
from scrapy.linkextractors import LinkExtractor
from douban.items import DoubanItem
class doubanspider(CrawlSpider):
name='douban'
urls=[]
for i in range(0,60,20):
page='https://movie.douban.com/subject/26363254/reviews?start={0}'.format(i)
urls.append(page)
start_urls=urls
rules =(Rule(LinkExtractor(allow=(r'https://movie.douban.com/review/\d+/')),callback='parse_item'),)
def parse_item(self,response):
douban=DoubanItem()
douban['title']=response.xpath('//div[@id="content"]//span[@property="v:summary"]/text()')[0].extract()
douban['author']=response.xpath('//div[@class="main"]//span[@property="v:reviewer"]/text()')[0].extract()
douban['time']=response.xpath('//span[@property="v:dtreviewed"]/text()')[0].extract()
douban['link']=response.url
# print(douban['title'],douban['author'],douban['content'],douban['time'])
yield douban
- name
关于name这个变量,是这个爬虫名字的代号,不可和其他爬虫程序重复 - start_urls
是爬虫程序爬取的对象。前面说到要爬取更多条影评,抓包的到URL里面有start参数,通过改变这个参数就可以翻页爬取,这里一共爬取了三页。(尴尬的是其实一开始是一次性爬的5页,后来程序多运行了几次,被douban封了IP,然后我就改成了3页,虽然这个改动没什么用) - CrawlSpider
这里自定义的doubanspider继承自CrawlSpider,后者继承于Spider,需要注意的是,CrawlSpider重写了parse方法,所以在自己写的doubanspider里不能重写parse方法,否则爬虫程序会运行出错。 - Rule
Rule和CrawlSpider搭配使用更方便于爬取全站,上面的代码中的rules就定义了爬取规则:
rules =(Rule(LinkExtractor(allow=(r'https://movie.douban.com/review/\d+/')),callback='parse_item'),)
allow 参数传入要爬取内容的规则,callback 传入回调方法名,其实还有一个 follow 参数,默认为 True ,具体用途这里不赘述了。
目前爬取数据可以做到了,但是一运行发现服务器给了 304(呵呵),就在setting.py 里面做了这样一个改动:
ROBOTSTXT_OBEY = False
这个参数原来默认是 True 的,改了这个,然后程序愉快的跑起来了。
数据存储到MySQL
这一步。。。个人对连接数据库这个知识点不是很熟,有更好的请指教。
链接数据库主要用的是 SQLAlchemy 这个 python 包,挺好用的,不知道怎么用的可以取廖雪峰大神的教程里面看看。
直接贴代码:
# pipelines.py
from douban.models import Douban
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
class DoubanPipeline(object):
def process_item(self, item, spider):
return item
class DOubanDatabasePipeline(object):
def __init__(self):
engine=create_engine('mysql+pymysql://root:password@localhost:3306/scrapy_spider?charset=utf8')
self.DBsession=sessionmaker(bind=engine)
def close_spider(self,spider):
pass
def open_spider(self,spider):
pass
def process_item(self,item,spider):
douban=Douban(title=item['title'],author=item['author'],time=item['time'],link=item['link'])
session=self.DBsession()
session.add(douban)
session.commit()
session.close()
最后别忘了在 setting.py 中设置一下:
ITEM_PIPELINES={
'douban.pipelines.DOubanDatabasePipeline':5
}
至此,基本上差不多了,感觉这个项目真的挺粗制滥造的。
github项目地址:https://github.com/killerYe/scrapy_spider
个人微信:yxw19971203
我只是一个初学编程的人,有兴趣可以加微信交流一下!!!
使用scrapy爬取豆瓣上面《战狼2》影评的更多相关文章
- scrapy爬取豆瓣电影top250
# -*- coding: utf-8 -*- # scrapy爬取豆瓣电影top250 import scrapy from douban.items import DoubanItem class ...
- Scrapy爬取豆瓣图书数据并写入MySQL
项目地址 BookSpider 介绍 本篇涉及的内容主要是获取分类下的所有图书数据,并写入MySQL 准备 Python3.6.Scrapy.Twisted.MySQLdb等 演示 代码 一.创建项目 ...
- scrapy爬取豆瓣电影信息
最近在学python,对python爬虫框架十分着迷,因此在网上看了许多大佬们的代码,经过反复测试修改,终于大功告成! 原文地址是:https://blog.csdn.net/ljm_9615/art ...
- Scrapy爬取豆瓣电影top250的电影数据、海报,MySQL存储
从GitHub得到完整项目(https://github.com/daleyzou/douban.git) 1.成果展示 数据库 本地海报图片 2.环境 (1)已安装Scrapy的Pycharm (2 ...
- scrapy 爬取豆瓣互联网图书
安装scrapy conda install scrapy 生成一个scrapy项目 scrapy startproject douban settings文件 # -*- coding: utf-8 ...
- Scrapy中用xpath/css爬取豆瓣电影Top250:解决403HTTP status code is not handled or not allowed
好吧,我又开始折腾豆瓣电影top250了,只是想试试各种方法,看看哪一种的方法效率是最好的,一直进行到这一步才知道 scrapy的强大,尤其是和selector结合之后,速度飞起.... 下面我就采用 ...
- Scrapy实战篇(三)之爬取豆瓣电影短评
今天的主要内容是爬取豆瓣电影短评,看一下网友是怎么评价最近的电影的,方便我们以后的分析,以以下三部电影:二十二,战狼,三生三世十里桃花为例. 由于豆瓣短评网页比较简单,且不存在动态加载的内容,我们下面 ...
- Scrapy 通过登录的方式爬取豆瓣影评数据
Scrapy 通过登录的方式爬取豆瓣影评数据 爬虫 Scrapy 豆瓣 Fly 由于需要爬取影评数据在来做分析,就选择了豆瓣影评来抓取数据,工具使用的是Scrapy工具来实现.scrapy工具使用起来 ...
- scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250
scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...
随机推荐
- .28-浅析webpack源码之compiler.resolvers
原本该在过WebpackOptionsApply时讲解这个方法的,但是当时一不小心过掉了,所以在这里补上. compiler.resolvers 该对象的三个方法均在WebpackOptionsApp ...
- 语义化版本控制规范(SemVer)
摘自: http://semver.org/lang/zh-CN/ 简介 在软件管理的领域里存在着被称作"依赖地狱"的死亡之谷,系统规模越大,加入的套件越多,你就越有可能在未来的某 ...
- SDP(2):ScalikeJDBC-Connection Pool Configuration
scalikeJDBC可以通过配置文件来设置连接池及全局系统参数.对配置文件的解析是通过TypesafeConfig工具库实现的.默认加载classpath下的application.conf,app ...
- linux 树型显示文件 tree ls tree 命令
原创 2016年07月27日 09:50:19 yum install tree tree www │?? │?? │?? └── xml.test │?? │?? └── valgrind.su ...
- 一个简洁的PHP可逆加密函数(分享)
http://www.jb51.net/article/38018.htm 本篇文章是对一个简洁的PHP可逆加密函数进行了详细的分析介绍,需要的朋友参考下 很多时候我们需要对数据进行加密解密,比如 ...
- Ajax beforeSend和complete 方法
http://blog.csdn.net/chenjianandiyi/article/details/52274591 .ajax({ beforeSend: function(){ // Hand ...
- php-cli和php-fpm的关系是什么?
CLI是命令行版本.FPM是作为Apache或者Nginx等服务器软件处理PHP文件的扩展. PHP的默认版本是不支持线程安全的,这个线程安全问题可以去了解PHP扩展开发方面的相关知识,这是因为C语言 ...
- Access是什么?
一种使用简单的数据库软件,非常实用! 是微软的一个小型数据库,是Microsoft office 中的一个组件. Access数据库能够进行数据表设计.可视查询设计.SQL查询语言.窗体设计.报表设计 ...
- Python3 字符串格式化
1.字符串的格式化: 按照统一的规格去输出成为一个新的字符串 2.字符串格式化的方法: 1)format方法 fomat()有两个参数位置参数和关键字参数用中括号括起来{ } #{0}{1}为位置参数 ...
- Web API (四) 特性路由(Attribute Route)
特性路由 是Web API 2 中提出的一种新的类型的路由,正如其名称那样,它是通过特性(Attribute) 来定义路由的,相比之前的基于模式(Convertion Based)的路由,特性路由 能 ...