这几天一直在学习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

    RuleCrawlSpider 搭配使用更方便于爬取全站,上面的代码中的 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》影评的更多相关文章

  1. scrapy爬取豆瓣电影top250

    # -*- coding: utf-8 -*- # scrapy爬取豆瓣电影top250 import scrapy from douban.items import DoubanItem class ...

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

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

  3. scrapy爬取豆瓣电影信息

    最近在学python,对python爬虫框架十分着迷,因此在网上看了许多大佬们的代码,经过反复测试修改,终于大功告成! 原文地址是:https://blog.csdn.net/ljm_9615/art ...

  4. Scrapy爬取豆瓣电影top250的电影数据、海报,MySQL存储

    从GitHub得到完整项目(https://github.com/daleyzou/douban.git) 1.成果展示 数据库 本地海报图片 2.环境 (1)已安装Scrapy的Pycharm (2 ...

  5. scrapy 爬取豆瓣互联网图书

    安装scrapy conda install scrapy 生成一个scrapy项目 scrapy startproject douban settings文件 # -*- coding: utf-8 ...

  6. Scrapy中用xpath/css爬取豆瓣电影Top250:解决403HTTP status code is not handled or not allowed

    好吧,我又开始折腾豆瓣电影top250了,只是想试试各种方法,看看哪一种的方法效率是最好的,一直进行到这一步才知道 scrapy的强大,尤其是和selector结合之后,速度飞起.... 下面我就采用 ...

  7. Scrapy实战篇(三)之爬取豆瓣电影短评

    今天的主要内容是爬取豆瓣电影短评,看一下网友是怎么评价最近的电影的,方便我们以后的分析,以以下三部电影:二十二,战狼,三生三世十里桃花为例. 由于豆瓣短评网页比较简单,且不存在动态加载的内容,我们下面 ...

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

    Scrapy 通过登录的方式爬取豆瓣影评数据 爬虫 Scrapy 豆瓣 Fly 由于需要爬取影评数据在来做分析,就选择了豆瓣影评来抓取数据,工具使用的是Scrapy工具来实现.scrapy工具使用起来 ...

  9. scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250

    scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250 前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo.这次我会以爬取豆瓣电影TOP250为例进一步为大 ...

随机推荐

  1. 同一台电脑使用 gitlab 和 github 配置

    Git 客户端与服务器端的通信支持多种协议,ssh 最常用.ssh的公钥登录流程,用户将自己的公钥存储在远程主机,登录时,远程主机会向用户发送一条消息,用户用自己的私钥加密后,再发给服务器.远程主机用 ...

  2. SQL Server 使用问题解答(持续更新中)

    问题一:sql server 2014不允许保存更改,您所做的更改要求删除并重新创建以下表 解答:工具-选项-不勾选组织保存要求重新创建表的更改,如下图确定.

  3. 10年java过来人聊聊自己的自学、培训和工作经历

    一 . 自我介绍 我叫王涛,我是一位北漂十年的码农,2008年9月份开始自学java,三个月后,自学无果,于2008年11月份开始参加培训,培训完之后,我觉得自己还是啥也不会,只会抄抄代码,竟然连de ...

  4. FSFS和VDFS存储方式的区别

    简单来说这个是VisualSVN基于FSFS文件系统格式扩展的.也就是说,分布式版本管理DVCS兴起之后,大家发现多个仓库的好处了,开始给SVN增加这个功能. 至于FSFS本身是SVN在2004年开始 ...

  5. dede列表标签list:应用大全 {dede:list}

    http://syizq.blog.163.com/blog/static/435700372011616115826329/ 标签名称: list 功能说明: 表示列表模板里的分页内容列表 适用范围 ...

  6. html_栏目下拉

    ========================================================= =================[ 下拉栏目菜单 ]=============== ...

  7. 关于MacOS升级10.13系统eclipse菜单灰色无法使用解决方案

    最近,苹果发布了macOS High Sierra,版本为10.13,专门针对mac pro的用户来着,至于好处大家到苹果官网看便是,我就是一个升级新版本系统的受益者,同时也变成了一个受害者:打开ec ...

  8. hive导出查询文件到本地文件的2种办法

    通过HQL语句 可以将hive 中表的数据生成到指定的目录. 有时候 我们可以利用hive来生成统计的中间文件(比源文件小的多的) 方法有如下2种: 1.INSERT OVERWRITE LOCAL ...

  9. MySQL 水平拆分(读书笔记整理)

    转:http://blog.csdn.net/mchdba/article/details/46278687 1,水平拆分的介绍 一般来说,简单的水平切分主要是将某个访问极其平凡的表再按照某个字段的某 ...

  10. 互联网公司为啥不使用mysql分区表?

    转:http://www.cnblogs.com/zhulin516114/p/7306708.html 缘起:有个朋友问我分区表在58的应用,我回答不出来,在我印象中,百度.58都没有听说有分区表相 ...