爬虫之scrapy框架(代码片段)

zycorn zycorn     2023-02-23     741

关键词:

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中。
其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

Scrapy 使用了 Twisted异步网络库来处理网络通讯。整体架构大致如下

技术分享图片

 

Scrapy主要包括了以下组件:

  • 引擎(Scrapy)
    用来处理整个系统的数据流处理, 触发事务(框架核心)
  • 调度器(Scheduler)
    用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
  • 下载器(Downloader)
    用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)
  • 爬虫(Spiders)
    爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面
  • 项目管道(Pipeline)
    负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。
  • 下载器中间件(Downloader Middlewares)
    位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。
  • 爬虫中间件(Spider Middlewares)
    介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。
  • 调度中间件(Scheduler Middewares)
    介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

Scrapy运行流程大概如下:

      1. 引擎从调度器中取出一个链接(URL)用于接下来的抓取
      2. 引擎把URL封装成一个请求(Request)传给下载器
      3. 下载器把资源下载下来,并封装成应答包(Response)
      4. 爬虫解析Response
      5. 解析出实体(Item),则交给实体管道进行进一步的处理
      6. 解析出的是链接(URL),则把URL交给调度器等待抓取

Scrapy的安装:

  Linux系统:

pip install scrapy

  Windows系统:

      a. pip3 install wheel

      b. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

      c. 进入下载目录,执行 pip3 install Twisted?17.1.0?cp35?cp35m?win_amd64.whl

      d. pip3 install pywin32

      e. pip3 install scrapy

Scrapy基本使用

1.基本命令

# 创建项目
scrapy startproject corn
# 进入项目
cd corn
# 创建爬虫程序
scrapy genspider 应用名称 爬取网页的起始url (例如:scrapy genspider corn www.xxx.com)
# 运行爬虫
scrapy crawl 爬虫名称(corn) --nolog

2.项目结构

技术分享图片

3.编写代码

# -*- coding: utf-8 -*-
import scrapy


class XiaohuarSpider(scrapy.Spider):
    name = xiaohuar #爬虫程序名
    # 允许爬取的域名(如果遇到非该域名的url则爬取不到数据)
    allowed_domains = [www.xxx.com]
    # 起始爬取的url
    start_urls = [http://www.xiaohuar.com/]

    # 访问起始URL并获取结果后的回调函数,该函数的response参数就是向起始的url发送请求后,获取的响应对象.该函数返回值必须为可迭代对象或者NUll

    def parse(self, response):
        print(response.text) #获取字符串类型的响应内容
        print(response.body)#获取字节类型的相应内容

4.修改配置(setting.py)

修改内容及其结果如下:
19行:USER_AGENT = Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36 #伪装请求载体身份

22行:ROBOTSTXT_OBEY = False  #可以忽略或者不遵守robots协议

5.执行爬虫程序

scrapy crawl xiaohuar(爬虫程序名字)

技术分享图片

执行程序后就拿到了整个页面的数据

小试牛刀:

将糗事百科首页中段子的内容和标题进行爬取

# -*- coding: utf-8 -*-
import scrapy

class QiubaiSpider(scrapy.Spider):
    name = qiubai
    allowed_domains = [https://www.qiushibaike.com/]
    start_urls = [https://www.qiushibaike.com/]

    def parse(self, response):
        #xpath为response中的方法,可以将xpath表达式直接作用于该函数中
        odiv = response.xpath(//div[@id="content-left"]/div)
        content_list = [] #用于存储解析到的数据
        for div in odiv:
            #xpath函数返回的为列表,列表中存放的数据为Selector类型的数据。我们解析到的内容被封装在了Selector对象中,需要调用extract()函数将解析的内容从Selecor中取出。
            author = div.xpath(.//div[@class="author clearfix"]/a/h2/text())[0].extract()
            content=div.xpath(.//div[@class="content"]/span/text())[0].extract()

            #将解析到的内容封装到字典中
            dic=
                作者:author,
                内容:content
            
            #将数据存储到content_list这个列表中
            content_list.append(dic)

        return content_list

执行程序:

    scrapy crawl 爬虫名称 :该种执行形式会显示执行的日志信息
    scrapy crawl 爬虫名称 --nolog:该种执行形式不会显示执行的日志信息

 

爬虫之scrapy框架(代码片段)

1.scrapy框架介绍  Scrapy是用纯Python实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架  Scrapy特色是使用了Twisted异步网络框架来处理网络通讯,加快了下载速度,不用自己去实现异步框架,并且包含了各种中间... 查看详情

爬虫之scrapy框架(代码片段)

...I所返回的数据(例如AmazonAssociatesWebServices)或者通用的网络爬虫。Scrapy是基于twisted 查看详情

python网络爬虫之scrapy框架(crawlspider)(代码片段)

目录Python网络爬虫之Scrapy框架(CrawlSpider)CrawlSpider使用爬取糗事百科糗图板块的所有页码数据Python网络爬虫之Scrapy框架(CrawlSpider)提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法?方法一... 查看详情

python爬虫之scrapy框架环境安装(代码片段)

文章目录前言一.scrapy框架环境安装二.创建一个scrapy工程前言为什么要学习scrapy框架?框架是一个集成了很多功能,并且具有很强通用性的一个项目模板。scrapy框架就具有许多强大的功能,例如高性能的持久化存储操... 查看详情

python爬虫之scrapy框架系列(10)——scrapy选择器selector(代码片段)

目录:1.Scrapy选择器1.1构造selector选择器1.2使用selector选择器1.Scrapy选择器Scrapy提供基于lxml库的解析机制,它们被称为选择器。因为,它们“选择”由XPath,re正则和CSS表达式指定的HTML文档的某部分。Scarpy选择器的API非常小,且非... 查看详情

爬虫之scrapy框架(代码片段)

...任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。Scrap,是碎片的意思,这个Python的爬虫框架叫Scrapy。Scrapy是基于twisted框架开发而来,twisted是一... 查看详情

scrapy框架之分布式操作(代码片段)

一、分布式爬虫介绍  分布式爬虫概念:多台机器上执行同一个爬虫程序,实现网站数据的分布爬取。1、原生的Scrapy无法实现分布式爬虫的原因?调度器无法在多台机器间共享:因为多台机器上部署的scrapy会各自拥有各自的... 查看详情

爬虫之scrapy框架(代码片段)

...I所返回的数据(例如AmazonAssociatesWebServices)或者通用的网络爬虫。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy使用了Twisted异步网络库来处理网络通讯。整体架构大致如下 Scrapy主要包括了以下组件:引擎(Scrapy)... 查看详情

python爬虫之scrapy框架系列——settings.py配置文件的学习(代码片段)

拓展:来仔细研读研读settings.py配置文件!#-*-coding:utf-8-*-#Scrapysettingsfordoubanproject##Forsimplicity,thisfilecontainsonlysettingsconsideredimportantor#commonlyused.Youcanfindmoresettingsconsultingthedocumentat 查看详情

python爬虫之scrapy框架系列——settings.py配置文件的学习(代码片段)

拓展:来仔细研读研读settings.py配置文件!#-*-coding:utf-8-*-#Scrapysettingsfordoubanproject##Forsimplicity,thisfilecontainsonlysettingsconsideredimportantor#commonlyused.Youcanfindmoresettingsconsultingthedocumentat 查看详情

python爬虫之scrapy框架,基本介绍使用以及用框架下载图片案例(代码片段)

一、Scrapy框架简介Scrapy是:由Python语言开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据,只需要实现少量的代码,就能够快速的抓取。Scrapy使用了Twisted异步网络框架来... 查看详情

python爬虫之scrapy框架系列(16)——深入剖析request和response类(代码片段)

目录:Request和Response类:1.深入剖析Request类:利用request.meta传递参数拓展一:FormRequest类2.深入剖析Response类:Request和Response类:1.深入剖析Request类:importscrapyfromscrapy.httpimportRequest#Scrapy.http.Request类是scrapy框架中request的基类。#####... 查看详情

python爬虫之scrapy框架系列(16)——深入剖析request和response类(代码片段)

目录:Request和Response类:1.深入剖析Request类:利用request.meta传递参数拓展一:FormRequest类2.深入剖析Response类:Request和Response类:1.深入剖析Request类:importscrapyfromscrapy.httpimportRequest#Scrapy.http.Request类是scrapy框架中request的基类。#####... 查看详情

爬虫系列之scrapy框架(代码片段)

...I所返回的数据(例如AmazonAssociatesWebServices)或者通用的网络爬虫。Scrapy是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架。因此Scrapy使用了一种非阻塞(又名异步)的代码来实现并发。整体架构大致如下:'... 查看详情

爬虫-scrapy框架简介与入门(代码片段)

...量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页内容以及各种图片,非常之方便。Scrapy使用了Twisted[‘tw?st?d](其主要对手是Tornado)异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己... 查看详情

5爬虫之scrapy框架(代码片段)

...I所返回的数据(例如AmazonAssociatesWebServices)或者通用的网络爬虫。Scrapy是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架。因此Scrapy使用了一种非阻塞(又名异步)的代码来实现并发。整体架构大致如下:Comp... 查看详情

python爬虫之scrapy框架系列(10)——scrapy选择器selector(代码片段)

目录:1.Scrapy选择器1.1构造selector选择器1.2使用selector选择器1.Scrapy选择器Scrapy提供基于lxml库的解析机制,它们被称为选择器。因为,它们“选择”由XPath,re正则和CSS表达式指定的HTML文档的某部分。Scarpy选择器的API非常小,且非... 查看详情

爬虫学习12.scrapy框架之递归解析和post请求(代码片段)

爬虫学习12.scrapy框架之递归解析和post请求今日概要递归爬取解析多页页面数据scrapy核心组件工作流程scrapy的post请求发送今日详情1.递归爬取解析多页页面数据-需求:将糗事百科所有页码的作者和段子内容数据进行爬取切持久化... 查看详情