使用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

    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:[email protected]: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

我只是一个初学编程的人,有兴趣可以加微信交流一下!!!

原文地址:https://www.cnblogs.com/gracelove/p/8284796.html

时间: 2024-11-05 18:50:06

使用scrapy爬取豆瓣上面《战狼2》影评的相关文章

scrapy爬取豆瓣电影top250

1 # -*- coding: utf-8 -*- 2 # scrapy爬取豆瓣电影top250 3 4 import scrapy 5 from douban.items import DoubanItem 6 7 8 class DoubanspiderSpider(scrapy.Spider): 9 name = "doubanspider" 10 # allowed_domains = ["movie.douban.com/top250"]注意这里的主页限制

运维学python之爬虫高级篇(五)scrapy爬取豆瓣电影TOP250

对于scrapy我们前面已经介绍了简单的应用,今天我们用一个完整的例子,爬取豆瓣电影TOP250来做一个小的练习,把scrapy阶段做一个总结. 1 环境配置 语言:Python 3.6.1 IDE: Pycharm 浏览器:firefox 爬虫框架:Scrapy 1.5.0 操作系统:Windows 10 家庭中文版 2 爬取前分析 2.1 需要保存的数据 首先确定我们要获取的内容,在items中定义字段,来将非结构化数据生成结构化数据,获取的内容主要包括:排名.电影名称.得分.评论人数.如下

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

从GitHub得到完整项目(https://github.com/daleyzou/douban.git) 1.成果展示 数据库 本地海报图片 2.环境 (1)已安装Scrapy的Pycharm (2)mysql (3)连上网络的电脑 3.实体类设计 4.代码 items.py 1 class DoubanItem(scrapy.Item): 2 title = scrapy.Field() 3 bd = scrapy.Field() 4 star = scrapy.Field() 5 quot

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

Scrapy 通过登录的方式爬取豆瓣影评数据 爬虫 Scrapy 豆瓣 Fly 由于需要爬取影评数据在来做分析,就选择了豆瓣影评来抓取数据,工具使用的是Scrapy工具来实现.scrapy工具使用起来比较简单,主要分为以下几步: 1.创建一个项目 ==scrapy startproject Douban 得到一个项目目录如下: ├── Douban │   ├── init.py │   ├── items.py │   ├── pipelines.py │   ├── settings.py

03_使用scrapy框架爬取豆瓣电影TOP250

前言: 本次项目是使用scrapy框架,爬取豆瓣电影TOP250的相关信息.其中涉及到代理IP,随机UA代理,最后将得到的数据保存到mongoDB中.本次爬取的内容实则不难.主要是熟悉scrapy相关命令以及理解框架各部分的作用. 1.本次目标 爬取豆瓣电影TOP250的信息,将得到的数据保存到mongoDB中. 2.准备工作 需要安装好scrapy以及mongoDB,安装步骤这里不做赘述.(这里最好是先了解scrapy框架各个部分的基本作用和基础知识,这样方便后面的内容的理解.scrapy文档

Python 2.7_利用xpath语法爬取豆瓣图书top250信息_20170129

大年初二,忙完家里一些事,顺带有人交流爬取豆瓣图书top250 1.构造urls列表 urls=['https://book.douban.com/top250?start={}'.format(str(i) for i in range(0, 226, 25))] 2.模块 requests获取网页源代码 lxml 解析网页 xpath提取 3.提取信息 4.可以封装成函数 此处没有封装调用 python代码: #coding:utf-8 import sys reload(sys) sys.

Scrapy爬取美女图片 (原创)

有半个月没有更新了,最近确实有点忙.先是华为的比赛,接着实验室又有项目,然后又学习了一些新的知识,所以没有更新文章.为了表达我的歉意,我给大家来一波福利... 今天咱们说的是爬虫框架.之前我使用python爬取慕课网的视频,是根据爬虫的机制,自己手工定制的,感觉没有那么高大上,所以我最近玩了玩 python中强大的爬虫框架Scrapy. Scrapy是一个用 Python 写的 Crawler Framework ,简单轻巧,并且非常方便.Scrapy 使用 Twisted 这个异步网络库来处理

团队-爬取豆瓣电影TOP250-需求分析

需求:爬取豆瓣电影TOP250 *向用户展示电影的排名,分数,名字,简介,导演,演员,前10条影评信息,链接信息 实现思路: 分析豆瓣电影TOP250的url规则, 编写模块获取相关url 获取全部相关页面的html代码 分析html中有关"排名,分数,名字,简介,导演,演员,前10条影评信息,链接信息"的标签 结合第三方工具包实现信息的提取 编写将"搜集信息"展示出来的模块

团队-Python 爬取豆瓣电影top250-需求分析

需求:爬取豆瓣电影TOP250 *向用户展示电影的排名,分数,名字,简介,导演,演员,前10条影评信息,链接信息 实现思路: 分析豆瓣电影TOP250的url规则, 编写模块获取相关url 获取全部相关页面的html代码 分析html中有关"排名,分数,名字,简介,导演,演员,前10条影评信息,链接信息"的标签 结合第三方工具包实现信息的提取 编写将"搜集信息"展示出来的模块