scrapy 订阅
Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。 [1]  Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。 [2] 展开全文
Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。 [1]  Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。 [2]
信息
外文名
scrapy
基本功能
数据挖掘
特    点
应用框架
中文名
抓取
应    用
数据挖掘、监测和自动化测试
scrapy基本功能
Scrapy是一个适用爬取网站数据、提取结构性数据的应用程序框架,它可以应用在广泛领域:Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。通常我们可以很简单的通过 Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片。 [3]  尽管Scrapy原本是设计用来屏幕抓取(更精确的说,是网络抓取),但它也可以用来访问API来提取数据。
收起全文
精华内容
下载资源
问答
  • scrapy

    千次阅读 2020-06-29 20:05:37
    scrapy 安装 scrapy 脚本 scrapy startproject mySpider scrapy genspider scrapy list scrapy genspider itcast “itcast.cn” scrapy crawl itcast

    scrapy 安装

    scrapy 脚本

    scrapy startproject mySpider
    scrapy genspider
    scrapy list
    scrapy genspider itcast “itcast.cn”
    scrapy crawl itcast

    展开全文
  • Scrapy

    千次阅读 多人点赞 2018-08-01 23:10:29
    Scrapy介绍  Scrapy一个开源和协作的框架,其最初是为了页面抓取(更确切来说,网络抓取)所设计的,使用它可以快速、简单、可扩展 的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛,可用于如挖掘、...

    Scrapy介绍

         Scrapy一个开源和协作的框架,其最初是为了页面抓取(更确切来说,网络抓取)所设计的,使用它可以快速、简单、可扩展

    的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛,可用于如挖掘、监测和自动化测试等领域,也可以应用在API

    所返回的数据(例如Amazon Associates Web Services)或者通用的网络爬虫。

          Scrapy是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架。因此Scrapy使用了一种非阻塞(又名异步)的代码来实现并发。整体架构大致如下

    Scrapy数据流是由执行的核心引擎(engine)控制,流程是这样的:

    1.引擎打开一个网站(open adomain),找到处理该网站的Spider并向该spider请求第一个要抓取的URL(s)。

    2.引擎从Spider中获取到第一个要抓取的URL并在调度器(Scheduler)以Request调度。

    3.引擎向调度器请求下一个要爬取的URL。

    4.调度器返回下一个要抓取的URL给引擎,引擎将URL通过下载中间件(请求(request)方向)转发给下载器(Downloader).

    5.一旦页面下载完毕,下载器生成一个该页面的Response,并将其通过下载中间件(返回(response)方向)发送给引擎。

    6.引擎从下载器中接收到Response并通过Spider中间件(输入方向)发送给Spider处理。

    7.Spider处理Response并返回爬取到的Item给Item Pipeline,将(Spider返回的)Request给调度器。

    8.引擎将(Spider返回的)爬取的Item给Item Pipeline,将(Spider返回的)Request给调度器。

    9.(从第二步)重复直到调度器中没有更多地request,引擎关闭该网站。

    Scrapy主要包括了一下组件:

    1.爬虫引擎(engine):爬虫引擎负责控制各个组件之间的数据流,当某些操作触发事件后都是通过engine来处理

    2.调度器:调度接收来engine的请求并将请求请求放入队列中,并通过事件返回给engine

    3.下载器:通过engine请求下载网络数据并将结果响应给engine

    4.spider:Spider发出请求,并处理engine返回给它下载器响应数据,以items和规则内的数据请求(urls)返回给engine

    5.管道数目(item pipeline):负责处理engine返回spider解析后的数据,并且将数据持久化,例如将数据存入数据库或者文件

    6.下载中间件:下载中间件是engine和下载器交互组件,以钩子(插件)的形式存在,可以代替接收请求、处理数据的下载以及

                              将结果响应给engine

    7.spider中间件:spider中间件是engine和spider之间的交互组件,以钩子(插件)的形式存在,可以代替处理response以及返回

                                给engine items及新的请求集


    windows环境配置

    Scrapy依赖包(也可到官网单独下载各文件安装):

    1.lxml: pip install wheel

    2.zope.interface:pip install zope.interface-4.3.3-cp35-cp35m-win_amd64.whl

    3.pyOpenSSL:pip install pyOpenSSL

    4.Twisted:pip install Twisted

    5.Scrapy:pip install Scrapy

    Anoconda+Pycharm+Scrapy Anaconda是包含了常用的数据科学库的Python发行版本,如果没有安装,

    可以到http://www.continuum.io/downloads下载对应平台的包安装。如果已经安装,那么可以轻松地通过

    conda命令安装Scrapy。conda install scrapy


    Scrapy安装完成后,打开命令行终端输入scrapy,显示如下:

    创建项目

    • 创建爬虫项目命令
    scrapy startproject project_name
    
    • 创建爬虫文件命令
    scrapy genspider example exameple.com
    • 文件目录如下
      D:\test>tree /F
    卷 软件 的文件夹 PATH 列表
    卷序列号为 58B6-0E53
    D:.
    └─project_dir
      │  scrapy.cfg
      │
      └─project_name
          │  items.py
          │  middlewares.py
          │  pipelines.py
          │  settings.py
          │  __init__.py
          │
          ├─spiders
          │  │  __init__.py
          │  │
          │  └─__pycache__
          └─__pycache__

    items.py:定义爬虫程序的数据模型,类似于实体类。

    middlewares.py:爬虫中间件,负责调度。

    pipelines.py:管道文件,负责对spider返回数据的处理。

    spiders目录 负责存放继承自scrapy的爬虫类

    scrapy.cfg.scrapy 基础配置

    init:初始化文件

    setting.py:负责对整个爬虫的配置,内容如下

      # -*- coding: utf-8 -*-
    
      # Scrapy settings for baidu project
      #
      # For simplicity, this file contains only settings considered important or
      # commonly used. You can find more settings consulting the documentation:
      #
      #     https://doc.scrapy.org/en/latest/topics/settings.html
      #     https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
      #     https://doc.scrapy.org/en/latest/topics/spider-middleware.html
    
      BOT_NAME = 'baidu'
    
      # 爬虫所在地
      SPIDER_MODULES = ['baidu.spiders']
      NEWSPIDER_MODULE = 'baidu.spiders'
    
    		
      # Crawl responsibly by identifying yourself (and your website) on the user-agent
      #USER_AGENT = 'baidu (+http://www.yourdomain.com)'
    
      # Obey robots.txt rules
      # 遵守爬虫协议
      ROBOTSTXT_OBEY = False
    
      # Configure maximum concurrent requests performed by Scrapy (default: 16)
      # 最大请求并发量 默认16
      # CONCURRENT_REQUESTS = 32
    
      # configure 配置 请求延迟
      # Configure a delay for requests for the same website (default: 0)
      # See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay
      # See also autothrottle settings and docs
      #DOWNLOAD_DELAY = 3
      # The download delay setting will honor only one of:
      #CONCURRENT_REQUESTS_PER_DOMAIN = 16
      #CONCURRENT_REQUESTS_PER_IP = 16
    
      # Disable cookies (enabled by default)
      # 是否使用cookie
      #COOKIES_ENABLED = False
    
      # Disable Telnet Console (enabled by default)
      #TELNETCONSOLE_ENABLED = False
    
      # Override the default request headers:
      #DEFAULT_REQUEST_HEADERS = {
      #   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
      #   'Accept-Language': 'en',
      #}
    
      # Enable or disable spider middlewares
      # See https://doc.scrapy.org/en/latest/topics/spider-middleware.html
      #SPIDER_MIDDLEWARES = {
      #         值越小,优先级越高,优先级越高,越先执行
      #    'baidu.middlewares.BaiduSpiderMiddleware': 543,
      #}
    
      # Enable or disable downloader middlewares
      # See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
      #DOWNLOADER_MIDDLEWARES = {
      #         值越小,优先级越高,优先级越高,越先执行
      #    'baidu.middlewares.BaiduDownloaderMiddleware': 543,
      #}
    
      # Enable or disable extensions 是否进行扩展
      # See https://doc.scrapy.org/en/latest/topics/extensions.html
      #EXTENSIONS = {
      #    'scrapy.extensions.telnet.TelnetConsole': None,
      #}
    
      # Configure item pipelines
      # See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
      ITEM_PIPELINES = {
          # 值越小,优先级越高,优先级越高,越先执行
         'baidu.pipelines.BaiduPipeline': 1,
      }
    
      # Enable and configure the AutoThrottle extension (disabled by default)
      # See https://doc.scrapy.org/en/latest/topics/autothrottle.html
      #AUTOTHROTTLE_ENABLED = True
      # The initial download delay
      #AUTOTHROTTLE_START_DELAY = 5
      # The maximum download delay to be set in case of high latencies
      #AUTOTHROTTLE_MAX_DELAY = 60
      # The average number of requests Scrapy should be sending in parallel to
      # each remote server
      #AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
      # Enable showing throttling stats for every response received:
      #AUTOTHROTTLE_DEBUG = False
    
      # Enable and configure HTTP caching (disabled by default)
      # See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
      #HTTPCACHE_ENABLED = True
      #HTTPCACHE_EXPIRATION_SECS = 0
      #HTTPCACHE_DIR = 'httpcache'
      #HTTPCACHE_IGNORE_HTTP_CODES = []
      #HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

     

    展开全文
  • Scrapy 学习

    万次阅读 2020-12-29 18:00:29
    文章目录一、概述二、Scrapy五大基本构成:三、整体架构图四、Scrapy安装以及生成项目五、日志等级与日志保存六、导出为json或scv格式七、一个完整的案例 一、概述 Scrapy,Python开发的一个快速、高层次的屏幕抓取和...

    一、概述

    Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试.

    其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 后台也应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫.

    Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持.

    二、Scrapy五大基本构成:

    Scrapy框架主要由五大组件组成,它们分别是调度器(Scheduler)、下载器(Downloader)、爬虫(Spider)和实体管道(Item Pipeline)、Scrapy引擎(Scrapy Engine)。下面我们分别介绍各个组件的作用。

    (1)、调度器(Scheduler):

    调度器,说白了把它假设成为一个URL(抓取网页的网址或者说是链接)的优先队列,由它来决定下一个要抓取的网址是 什么,同时去除重复的网址(不做无用功)。用户可以自己的需求定制调度器。

    (2)、下载器(Downloader):

    下载器,是所有组件中负担最大的,它用于高速地下载网络上的资源。Scrapy的下载器代码不会太复杂,但效率高,主要的原因是Scrapy下载器是建立在twisted这个高效的异步模型上的(其实整个框架都在建立在这个模型上的)。

    (3)、 爬虫(Spider):

    爬虫,是用户最关心的部份。用户定制自己的爬虫(通过定制正则表达式等语法),用于从特定的网页中提取自己需要的信息,即所谓的实体(Item)。 用户也可以从中提取出链接,让Scrapy继续抓取下一个页面。

    (4)、 实体管道(Item Pipeline):

    实体管道,用于处理爬虫(spider)提取的实体。主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。

    (5)、Scrapy引擎(Scrapy Engine):

    Scrapy引擎是整个框架的核心.它用来控制调试器、下载器、爬虫。实际上,引擎相当于计算机的CPU,它控制着整个流程。

    三、整体架构图

    本图按顺序说明整个程序执行时候发生的顺序。

    注意在调用下载器时,往往有一个下载器中间件,使下载速度提速。

    img

    官网架构图

    img

    四、Scrapy安装以及生成项目

    新建一个项目,该项目的结构如下:

    执行命令,widows和ubuntu命令格式是一样的:

    下载方式

    ubuntu,打开一个终端,输入pip install scrapy(或pip3 install scrapy)

    widows ,打开一个cmd,输入pip install scrapy,前提是你装了pip

    详细安装请点这

    img

    scrapy startproject 项目名

    scrapy genspider 爬虫名 域名

    scrapy crawl 爬虫名

    我使用的是widows版本,下面演示创建项目的例子

    打开cmd,输入(默认是在C:\Users\Administrator>这个目录下,你可以自行切换)

    scrapy startproject myfirstPj

    cd my firstPj

    scrapy genspider baidu www.baidu.com

    创建后目录大致页如下

    |-ProjectName #项目文件夹

    |-ProjectName #项目目录

    |-items.py #定义数据结构

    |-middlewares.py #中间件

    |-pipelines.py #数据处理

    |-settings.py #全局配置

    |-spiders

    ​ |-init.py #爬虫文件

    ​ |-baidu.py

    |-scrapy.cfg #项目基本配置文件

    spiders下的baidu.py是scrapy自动为我们生成的

    img

    下面再看一下spdier项目的配置文件,打开文件settings.py

    BOT_NAME:项目名

    USER_AGENT:默认是注释的,这个东西非常重要,如果不写很容易被判断为电脑,简单点洗一个Mozilla/5.0即可

    ROBOTSTXT_OBEY:是否遵循机器人协议,默认是true,需要改为false,否则很多东西爬不了

    img

    CONCURRENT_REQUESTS:最大并发数,很好理解,就是同时允许开启多少个爬虫线程

    DOWNLOAD_DELAY:下载延迟时间,单位是秒,控制爬虫爬取的频率,根据你的项目调整,不要太快也不要太慢,默认是3秒,即爬一个停3秒,设置为1秒性价比较高,如果要爬取的文件较多,写零点几秒也行

    COOKIES_ENABLED:是否保存COOKIES,默认关闭,开机可以记录爬取过程中的COKIE,非常好用的一个参数

    DEFAULT_REQUEST_HEADERS:默认请求头,上面写了一个USER_AGENT,其实这个东西就是放在请求头里面的,这个东西可以根据你爬取的内容做相应设置。

    img

    ITEM_PIPELINES:项目管道,300为优先级,越低越爬取的优先度越高

    img

    比如我的pipelines.py里面写了两个管道,一个爬取网页的管道,一个存数据库的管道,我调整了他们的优先级,如果有爬虫数据,优先执行存库操作。

    ITEM_PIPELINES = {
    
    
    
        'scrapyP1.pipelines.BaiduPipeline': 300,
    
    
    
        'scrapyP1.pipelines.BaiduMysqlPipeline': 200,
    
    
    
    }
    

    img

    到这里我们尝试用scrapy做一下爬取,打开spider.py下的baidu.py(取决于你scrapy genspider 爬虫名 域名时输入的爬虫名)

    输入一下代码,我们使用xpath提取百度首页的标题title

    import scrapy
     
     
    class BaiduSpider(scrapy.Spider):
        name = 'baidu'
        allowed_domains = ['www.baidu.com']
        start_urls = ['http://www.baidu.com/']
     
        def parse(self, response):
            tile=response.xpath('//html/head/title/text()')
            print(tile)
    

    打开一个终端cmd,输入scrapy crawl baidu(爬虫名),就可以看到一大堆输出信息,而其中就包括我们要的内容

    img

    使用终端运行太麻烦了,而且不能提取数据,我们一个写一个run文件作为程序的入口,splite是必须写的,目的是把字符串转为列表形式,第一个参数是scrapy,第二个crawl,第三个baidu

    from scrapy import cmdline
    
    
    
     
    
    
    
    cmdline.execute('scrapy crawl baidu'.split())
    

    可以在编辑器中输出了

    img

    使用终端运行太麻烦了,而且不能提取数据,我们一个写一个run文件作为程序的入口,splite是必须写的,目的是把字符串转为列表形式,第一个参数是scrapy,第二个crawl,第三个baidu

    from scrapy import cmdline
    
    
    
     
    
    
    
    cmdline.execute('scrapy crawl baidu'.split())
    

    可以在编辑器中输出了

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LHFlAlC1-1609235975912)(picture/20200321130523487.png)]

    五、日志等级与日志保存

    在setting.py里面可以设置日志的等级与日志存放的路径

    相关变量

    LOG_LEVEL= ""

    LOG_FILE="日志名.log"

    日志等级分为

    1.DEBUG 调试信息

    2.INFO 一般信息

    3.WARNING 警告

    4.ERROR 普通错误

    5.CRITICAL 严重错误

    如果设置

    LOG_LEVEL=“WARNING”,就只会WARNING等级之下的ERROR和CRITICAL

    默认等级是1

    六、导出为json或scv格式

    执行爬虫文件时添加-o选项即可

    scrapy crawl 项目名 -o *.csv

    scrapy crawl 项目名 -o *.json

    对于json文件,在setting.js文件里添加,设置编码格式,否则会乱码:

    FEED_EXPORT_ENCODING=‘utf-8’

    示例:

    from scrapy import cmdline
     
    cmdline.execute('scrapy crawl baidu -o baidu.csv'.split())
    

    七、一个完整的案例

    这个项目我们的主题是爬腾讯视频的电影信息,包括电影名和描述

    img

    1.创建项目

    打开一个终端输入(建议放到合适的路径下,默认是C盘)

    scrapy startproject TXmovies

    cd TXmovies

    scrapy genspider txms v.qq.com

    2.修改setting

    修改三项内容,第一个是不遵循机器人协议,第二个是下载间隙,由于下面的程序要下载多个页面,所以需要给一个间隙(不给也可以,只是很容易被侦测到),第三个是请求头,添加一个User-Agent,第四个是打开一个管道

    ROBOTSTXT_OBEY = False
     
    DOWNLOAD_DELAY = 1
     
    DEFAULT_REQUEST_HEADERS = {
      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
      'Accept-Language': 'en',
      'User-Agent':'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36'
    }
     
    ITEM_PIPELINES = {
       'TXmovies.pipelines.TxmoviesPipeline': 300,
    }
    

    3.确认要提取的数据,item项

    item定义你要提取的内容(定义数据结构),比如我提取的内容为电影名和电影描述,我就创建两个变量。Field方法实际上的做法是创建一个字典,给字典添加一个建,暂时不赋值,等待提取数据后再赋值。下面item的结构可以表示为:{‘name’:’’,‘descripition’:’’}。

    # -*- coding: utf-8 -*-
     
    # Define here the models for your scraped items
    #
    # See documentation in:
    # https://docs.scrapy.org/en/latest/topics/items.html
     
    import scrapy
     
     
    class TxmoviesItem(scrapy.Item):
        # define the fields for your item here like:
        # name = scrapy.Field()
        name = scrapy.Field()
        description = scrapy.Field()
    

    4.写爬虫程序

    我们要写的部分是parse方法里的内容,重点在于如何写xpath,关于xpath我不多讲,有兴趣可以看看我另一篇文章,XPATH教程

    引入刚刚写好的item,刚刚说了item里面创建的变量就是字典的键值,可以直接进行赋值。赋值后交给管道处理。

    简单讲一下这一段代码的思路,首先腾讯视频的url为https://v.qq.com/x/bu/pagesheet/list?append=1&channel=cartoon&iarea=1&listpage=2&offset=0&pagesize=30

    我们注意到offset这一项,第一页的offset为0,第二页为30,依次推列。在程序中这一项用于控制抓取第一页,但是也要给一个范围,不可能无限大,否则会报错,可以去看看腾讯一共有多少页视频,也可以写一个异常捕获机制,捕捉到请求出错则退出。我这里仅仅是示范,所以只给了120,也就是4页。

    yield

    程序里一共有两个yield,我比较喜欢叫它中断,当然中断只在CPU中发生,它的作用是移交控制权,在本程序中,我们对item封装数据后,就调用yield把控制权给管道,管道拿到处理后return返回,又回到该程序。这是对第一个yield的解释。

    第二个yield稍微复杂点,这条程序里利用了一个回调机制,即callback,回调的对象是parse,也就是当前方法,通过不断的回调,程序将陷入循环,如果不给程序加条件,就会陷入死循环,如本程序我把if去掉,那就是死循环了。

    yield scrapy.Request(url=url,callback=self.parse)

    xpath

    还有一个要注意的是如何提取xpathl里的数据,我们的写法有四种,第一种写法拿到selector选择器,也就是原数据,里面有一些我们用不到的东西。第二个extract(),将选择器序列号为字符串。第三个和第四个一样,拿到字符串里的第一个数据,也就是我们要的数据。

    items[‘name’]=i.xpath(’./a/@title’)[0]

    items[‘name’]=i.xpath(’./a/@title’).extract()

    items[‘name’]=i.xpath(’./a/@title’).extract_first()

    items[‘name’]=i.xpath(’./a/@title’).get()

    # -*- coding: utf-8 -*-
    import scrapy
    from ..items import TxmoviesItem
     
    class TxmsSpider(scrapy.Spider):
        name = 'txms'
        allowed_domains = ['v.qq.com']
        start_urls = ['https://v.qq.com/x/bu/pagesheet/list?append=1&channel=cartoon&iarea=1&listpage=2&offset=0&pagesize=30']
        offset=0
     
        def parse(self, response):
            items=TxmoviesItem()
            lists=response.xpath('//div[@class="list_item"]')
            for i in lists:
                items['name']=i.xpath('./a/@title').get()
                items['description']=i.xpath('./div/div/@title').get()
     
                yield items
     
            if self.offset < 120:
                self.offset += 30
                url = 'https://v.qq.com/x/bu/pagesheet/list?append=1&channel=cartoon&iarea=1&listpage=2&offset={}&pagesize=30'.format(
                    str(self.offset))
     
                yield scrapy.Request(url=url,callback=self.parse)
    

    5.交给管道输出

    管道可以处理提取的数据,如存数据库。我们这里仅输出。

    # -*- coding: utf-8 -*-
     
    # Define your item pipelines here
    #
    # Don't forget to add your pipeline to the ITEM_PIPELINES setting
    # See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
     
     
    class TxmoviesPipeline(object):
        def process_item(self, item, spider):
            print(item)
            return item
    

    6.run,执行项目

    from scrapy import cmdline
     
    cmdline.execute('scrapy crawl txms'.split())
    

    7.测试结果

    白色的管道输出的结果,红色的调试信息

    img

    8.流程梳理

    新建项目-》进入项目-》新建爬虫文件-》明确抓取的内容,写item-》写爬虫程序,爬取数据-》交给管道处理数据-》调整全局配置setting-》执行爬虫程序,可以通过终端或者在程序里写一个run程序

    9.提速:多线程爬取

    如果你实现了上面的实验,不难发现其爬取速度是非常慢,根本的原因就是因为它是顺序执行的,你可以从结果中看出,总是前面一页的内容被输出,再输出后面的内容。不适合处理数据量较大的情况,一个好的方式是采用多线程的方法,这里的多线程是基于方法的多线程,并不是通过创建Thread对象来实现,是在一个方法中,一次性把请求交给调度器。

    我们通过重写start_requests方法来实现我们的想法(这个方法的源码在__init__.py下面,有兴趣可以看一下)

    # -*- coding: utf-8 -*-
    import scrapy
    from ..items import TxmoviesItem
     
    class TxmsSpider(scrapy.Spider):
        name = 'txms'
        allowed_domains = ['v.qq.com']
        url='https://v.qq.com/x/bu/pagesheet/list?append=1&channel=cartoon&iarea=1&listpage=2&offset={}&pagesize=30'
        offset=0
     
        def start_requests(self):
            for i in range(0,121,30):
                url=self.url.format(i)
                yield scrapy.Request(
                    url=url,
                    callback=self.parse
                )
     
        def parse(self, response):
            items=TxmoviesItem()
            lists=response.xpath('//div[@class="list_item"]')
            for i in lists:
                items['name']=i.xpath('./a/@title').get()
                items['description']=i.xpath('./div/div/@title').get()
     
                yield items
    
    展开全文
  • scrapy 常用命令详解

    万次阅读 2020-06-07 18:14:26
    官方文档:https://docs.scrapy.org/en/latest/topics/commands.html Global commands: startproject genspider settings runspider shell fetch view version Project-...

     官方文档:https://docs.scrapy.org/en/latest/topics/commands.html

     

    Global commands:

    Project-only commands:

     

    genspider-->注意:-t指定创建模板,默认basic

    • Syntax: scrapy genspider [-t template] <name> <domain>

    • Requires project: no

    Usage example:

    $ scrapy genspider -l
    Available templates:
      basic
      crawl
      csvfeed
      xmlfeed
    
    $ scrapy genspider example example.com
    Created spider 'example' using template 'basic'
    
    $ scrapy genspider -t crawl scrapyorg scrapy.org
    Created spider 'scrapyorg' using template 'crawl'

     

    runspider-->好处是无须项目路径支持,但spider_file.py不支持相对路径

    • Syntax: scrapy runspider <spider_file.py>

    • Requires project: no

    Run a spider self-contained in a Python file, without having to create a project.

    Example usage:

    $ scrapy runspider myspider.py
    [ ... spider starts crawling ... ]

     

    parse-->重点推荐,调试方便,可指定回调函数运行 例如:scrapy parse https://www.baidu.com -c parse_detail --spider=tencent

    • Syntax: scrapy parse <url> [options]

    • Requires project: yes

    Fetches the given URL and parses it with the spider that handles it, using the method passed with the --callback option, or parse if not given.

    Supported options:

    • --spider=SPIDER: bypass spider autodetection and force use of specific spider

    • --a NAME=VALUE: set spider argument (may be repeated)

    • --callback or -c: spider method to use as callback for parsing the response

    • --meta or -m: additional request meta that will be passed to the callback request. This must be a valid json string. Example: –meta=’{“foo” : “bar”}’

    • --cbkwargs: additional keyword arguments that will be passed to the callback. This must be a valid json string. Example: –cbkwargs=’{“foo” : “bar”}’

    • --pipelines: process items through pipelines

    • --rules or -r: use CrawlSpider rules to discover the callback (i.e. spider method) to use for parsing the response

    • --noitems: don’t show scraped items

    • --nolinks: don’t show extracted links

    • --nocolour: avoid using pygments to colorize the output

    • --depth or -d: depth level for which the requests should be followed recursively (default: 1)

    • --verbose or -v: display information for each depth level

    Usage example:

    $ scrapy parse http://www.example.com/ -c parse_item
    [ ... scrapy log lines crawling example.com spider ... ]
    
    >>> STATUS DEPTH LEVEL 1 <<<
    # Scraped Items  ------------------------------------------------------------
    [{'name': 'Example item',
     'category': 'Furniture',
     'length': '12 cm'}]
    
    # Requests  -----------------------------------------------------------------
    []
    展开全文
  • scrapy-splash简单使用

    万次阅读 2020-06-03 10:04:33
    scrapy-splash简单使用: 1.docker安装splash docker info 查看docker信息 docker images 查看所有镜像 docker pull scrapinghub/splash 安装scrapinghub/splash docker run -p 8050:8050 scrapinghub/splash &...
  • 亲身经历——下载Scrapy

    万次阅读 2020-08-25 22:51:56
    下载Scrapy Scrapy 是一套基于基于Twisted的异步处理框架,纯python实现的爬虫框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片等等。 首先 使用我们的pip命令对Scrapy进行...
  • [Scrapy使用技巧] 如何在scrapy中捕获并处理各种异常

    万次阅读 热门讨论 2018-06-15 16:29:50
    使用scrapy进行大型爬取任务的时候(爬取耗时以天为单位),无论主机网速多好,爬完之后总会发现scrapy日志中“item_scraped_count”不等于预先的种子数量,总有一部分种子爬取失败,失败的类型可能有如下图两种...
  • Scrapy Shell

    2019-12-18 23:47:46
    这篇文章很简单,可以说是 Scrapy 系列中最短最简单的文章。本篇文章主要讲解 Scrapy Shell 的相关知识。 零、 Scrapy Shell Scrapy Shell 是一个交互终端,可以在没有启动 Spider 的情况下调试代码。我们在开发爬虫...
  • Python爬虫框架Scrapy

    千人学习 2019-08-07 15:57:44
    Scrapy使用实践中,我们深刻体会到Scrapy框架只实现了爬虫流程,而真正的Scrapy核心是CSS选择器、xpath和正则表达式,所以本课程一开始先讲述了这三门课程,有了这三门课程的基础再学习Scrapy就会非常轻松。
  • Python3 Scrapy爬虫框架(Scrapy/scrapy-redis)

    千次阅读 2018-04-19 20:10:52
    Python3 Scrapy爬虫框架(Scrapy/scrapy-redis) 本文由 Luzhuo 编写,转发请保留该信息. 原文: https://blog.csdn.net/Rozol/article/details/80010173 Scrapy Scrapy 是 Python 写的, 主要用于爬取网站...
  • Scrapy 2.0

    千次阅读 2020-03-25 11:04:49
    Scrapy 2.0 Scrapy 安装 (scrapy) C:\Users\15011>pip install scrapy -i https://pypi.douban.com/simple/ 如果遇到安装Twisted包的时候,报出以下错误。 Building wheels for collected packages: Twisted ...
  • Scrapy入门

    千次阅读 2020-04-12 22:06:58
    Scrapy入门
  • Scrapy简介

    2021-02-15 17:10:45
    目录Scrapy介绍Scrapy工作流程Scrapy入门pipline使用总结 Scrapy介绍 什么是Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速的抓取 Scrapy使用了...
  • Scrapy-Redis入门实战

    万次阅读 2019-05-05 19:28:13
    目录 ...scrapy-redis是一个基于redis的scrapy组件,用于快速实现scrapy项目的分布式部署和数据爬取,其运行原理如下图所示。 Scrapy-Redis特性 分布式爬取 你可以启动多个共享同一redis队列...
  • Scrapy教程

    2018-12-19 14:59:42
    Scrapy教程 Scrapy概述 Scrapy环境 Scrapy命令行工具 Scrapy蜘蛛 Scrapy选择器 Scrapy项目 Scrapy Item Loaders Scrapy shell Scrapy Item Pipeline Scrapy Feed exports Scrapy请求和响应 Scrapy链接提取器 ...
  • Scrapy框架—— 安装Scrapy 需求配置 安装sqlite依赖库 编译python3.6 编译Twisted 安装Scrapy 测试Scrapy是否成功安装 Scrapy框架—— 安装Scrapy    Scrapy 可以说是爬虫界鼎鼎有名的框架。 它是一个...
  • 了解scrapy,知道scrapy-redis可以用来干嘛,最好已经有了可以单机运行的scrapy爬虫。 已经尝试了一些反反爬措施后仍然觉得爬取效率太低。 已经看了无数scrapy-redis文章,却和我一样不得要领。(自己太笨) 已经看了...
  • Scrapy 入门教程

    千次阅读 2020-11-21 13:45:12
    Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。 Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。 通常我们可以很简单的通过 Scrapy 框架实现一个爬虫...
  • scrapyd,scrapy部署

    万次阅读 2020-03-31 08:07:43
    /Library/Frameworks/Python.framework/Versions/3.7/bin/scrapyd-deploy:23: ScrapyDeprecationWarning: Module scrapy.utils.http is deprecated, Please import from w3lib.http instead. from scrapy.utils....
  • scrapy启动

    2019-07-02 09:02:00
    在开始爬取之前,您必须创建一个新的Scrapy项目。 进入您打算存储代码的目录中,运行下列命令: scrapy startproject scrapytest 第一种scrapy genspider example example.com第二种scrapy genspider -t crawl ...
  • 记录一下scrapy中 settings 的一些配置

    万次阅读 2020-01-16 11:49:41
    # 字符编码 FEED_EXPORT_ENCODING = 'utf-8' # redis写法一 # REDIS_URL = 'redis://localhost:6379' # redis写法二 REDIS_HOST = '192.168.10...# 默认的 scrapy redis 会读取下面的密码和db REDIS_PARAMS = {...
  • scrapy实例

    2018-08-30 20:21:31
    创建Scrapy项目 scrapy startproject Tencent 编写item import scrapy class TencentItem(scrapy.Item): # 职位名 positionname = scrapy.Field() # 详情连接 positionlink = scrapy.Field() # 职位类别...
  • 1.环境 win10 PyCharm Python 3.6 2.scrapy 环境搭建 ...安装两个python模块:Twisted、scrapy。... 安装scrapy:执行 pip installscrapy 【注】安装完成后,执行 pip list 检查以下上述两个模块是否安装成功。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,289
精华内容 21,715
关键字:

scrapy