scrapy库详解

scrapy是一个完整的爬虫框架,一共有5个部分组成和2个中间部分,最主要的是一下五个部分:

  1. ENGINE
  2. SCHEDULER
  3. ITEM PIPELINES
  4. SPIDERS
  5. DOWNLOADER

88536273.jpg

用户主要编写spider和item pipelines,其余三个模块是事先写好的,不需要修改

可以通过修改downloader middleware中间键来对engine,scheduler和Downloader进行配置

scrapy通过命令行运行

scrapy command [options] [args]

scrapy有6个常用命令

  1. startproject:创建一个新的工程
  2. genspider:创建一个爬虫
  3. settings:获得爬虫配置信息
  4. crawl:运行一个爬虫
  5. list:列出工程中所有爬虫
  6. shell:启动url调试命令行

建立一个scrapy工程的方法

scrapy startproject python123demo

62349910.jpg

建立完成之后可以看到的文件夹下产生了一个名为python123的文件,进入该文件可以看到一个scrapy.cfg的文件,这是一个部署scrapy的配置文件

│ scrapy.cfg
│
└─python123demo
    │  items.py
    │  middlewares.py
    │  pipelines.py
    │  settings.py
    │  __init__.py
    │
    └─spiders
            __init__.py

文件树目录如下, 在windows中通过tree /F python123demo查看

使用如下命令生成名为demo的爬虫,爬取的网页为python123.io

scrapy genspider demo python123.io

产生的demo.py如下

import scrapy


class DemoSpider(scrapy.Spider):
    name = 'demo'
    allowed_domains = ['python123.io']
    start_urls = ['http://python123.io/']

    def parse(self, response):
        pass

scrapy的request类里面有一下几个方法:

  1. .url:request对应的请求url地址
  2. .method:对应的请求方法,'GET','POST'等等
  3. .headers:字典类型的请求头
  4. .body:请求内容主体,字符串类型
  5. .meta:用户添加的扩展信息,在scrapy内部模块间传递信息使用
  6. .copy():复制该请求

Rsponse类7个常用方法:

  1. .url:response对应的url地址
  2. .status:状态码,默认是200
  3. .headers:response头部信息
  4. .body:response对应的内容信息,字符串类型
  5. .flags:一组标记
  6. request:产生Response类型对应的request对象
  7. .copy():复制该响应

实例

爬取股票数据

步骤一

scrapy startproject BaiduStocks
cd BaiduStocks
scrapy genspider stocks baidu.com

步骤二

修改spider文件夹下的stocks.py文件

import scrapy
import re

class StocksSpider(scrapy.Spider):
    name = 'stocks'
    start_urls = ['http://quote.eastmoney.com/stocklist.html']

    def parse(self, response):
        for href in response.css('a::attr(href)').extract():
            try:
                stock = re.findall(r"[s][hz]\d{6}", href)[0]
                url = 'https://gupiao.baidu.com/stock/' + stock + '.html'
                yield scrapy.Request(url, callback=self.parse_stock)
            except:
                continue

    def parser_stock(self,response):
        infodict = {}
        stockInfo = response.css('.stock-bets')
        name = stockInfo.css('.bets-name').extract()[0]
        keyList = stockInfo.css('dt').extract()
        ValueList = stockInfo.css('dd').extract()
        for i in range(len(keyList)):
            key = re.findall(r'>.*</dt>',keyList[i])[0][1:-5]
            try:
                val = re.findall(r'\d+\.?.*</dd>',ValueList[i])[0][0:-5]
            except:
                val = '--'
            infodict[key] = val
            # infodict['股票名称'] = name
        infoDict.update(
            {'股票名称': re.findall('\s.*\(', name)[0].split()[0] + \
                        re.findall('\>.*\<', name)[0][1:-1]})
        yield infodict

通过东方财富网获得stock的代码,然后同过百度股票爬取信息,其中parse和perser_stock函数都通过yield变成生成器

第三步

更改pipeline.py,用于数据处理,定义一个新的处理数据的类称为BaiduStockInfoPipeline,定义open_spider,close_spider,以及process_item三个函数

class BaiduStockInfoPipeline(object):
    def open_spider(self,spider):
        self.f = open('BaiduStockInfo.txt','w')

    def close_spider(self,spider):
        self.f.close()

    def process_item(self,item,spider):
        try:
            line = str(dict(item)) + '\n'
            self.f.write(line)
        except:
            pass
        return item

第四步

修改settings.py,把ITEM_PIPELINES里面用到的类改为自己定义的BaiduStockInfoPipeline:

ITEM_PIPELINES = {
   'BaiduStocks.pipelines.BaiduStockInfoPipeline': 300,
}

转载于:https://www.cnblogs.com/drawon/p/8520606.html

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Scrapy是一个Python爬虫框架,它提供了一种快速、高效、可扩展的方式来爬取网站数据。Scrapy的主要特点包括: 1. 基于Twisted异步网络框架,可以高效地处理大量的并发请求。 2. 支持多种数据格式,包括XML、JSON、CSV等。 3. 提供了强大的数据提取功能,可以通过XPath或CSS选择器来提取网页中的数据。 4. 支持分布式爬取,可以通过Scrapy-Redis等插件实现。 5. 提供了丰富的中间件和扩展机制,可以方便地定制爬虫行为。 Scrapy的使用流程一般包括以下几个步骤: 1. 定义Item:定义需要爬取的数据结构。 2. 编写Spider:编写爬虫代码,定义如何爬取网站数据。 3. 定义Pipeline:定义数据处理流程,对爬取到的数据进行处理和存储。 4. 配置Settings:配置爬虫的一些参数,如请求头、下载延迟等。 5. 运行爬虫:使用命令行工具或Scrapy API启动爬虫。 总之,Scrapy是一个功能强大、易于使用的Python爬虫框架,可以帮助开发者快速地构建高效、可扩展的爬虫应用。 ### 回答2: Scrapy是一个基于Python的开源网络爬虫框架。它可以在一个爬虫工程师的控制下自动执行爬取任务,不仅可方便地快速抓取各类网站数据,而且还能够轻松地对爬取到的数据进行处理、存储和展示。 Scrapy的功能包括了爬虫组件、下载器、中间件框架、优化器和调度器。其中,爬虫组件是Scrapy的核心模块,它负责实现对爬取网站的访问和数据解析,并抽象成Scrapy的Item类型。下载器用于获取相应网页的HTTP数据,中间件框架可以进行层层拦截和处理各种网络请求,以支持一些高级事务。另外,优化器和调度器则主要负责控制整个爬虫工程师的流程和顺序。 Scrapy的使用方式极为简单。在使用Scrapy之前,首先需要使用命令“scrapy startproject”来创建一个工程,然后可在该工程下进一步创建一到多个爬虫组件并指定需要爬取的网址。接下来,我们可定义一个Item类型,来解决需要爬取的数据对象的问题。在爬虫组件中,我们需要定义如何爬取和解析数据。同时,如果希望实现登录功能,我们可在中间件框架中进行相应设置。而对于数据存储和展示等操作,我们也可以在Item Pipeline中定义。 总结起来,Scrapy框架解决了网页数据爬取的问题,提供了简单易用的API以及丰富的,可以完成高效而优质的爬取,而且功能上也足以满足个人爬虫开发的需求。如果我们希望进一步学习更多Scrapy的应用,我们可以参考Scrapy官方文档、StackOverflow和GitHub的相关资源,以及优秀的一些自媒体博文和经验分享。 ### 回答3: Scrapy是一个Python编写的用于Web数据采集的高级抓取框架。它是一个基于Twisted框架的异步网络,可以更高效地处理网页的并发请求和响应。Scrapy框架的架构模式和流程非常清晰,包括了一系列数据处理工具和插件,方便用户进行数据的爬取、处理、存储和展示。 Scrapy框架主要包括以下几个模块: 1. Engine: 引擎控制所有模块进行协作,调度模块接收引擎发来的请求,并将其转发给下载器,同时将下载器获得的响应反馈给引擎。 2. Scheduler: 调度器负责接收并存储引擎发来的请求,并按照一定的策略进行调度,将请求发送给下载器。 3. Downloader: 下载器负责请求网络数据,将响应返回给引擎。 4. Spider: 爬虫负责解析、处理响应,并产生需要的请求数据,将其发给引擎。爬虫是用户自定义的模块,用于指定如何对网站进行数据抓取和处理。 5. Item Pipeline: 项目管道用于处理从Spider中获取到的Item,可以对Item进行过滤、验证、清洗和存储等操作。 6. Middlewares: 中间件用于修改在引擎和下载器之间传递的请求和响应,可以被用于添加请求头、代理、IP池、处理Cookie等操作。 使用Scrapy,可以很好地解决数据采集过程中遇到的各种问题,如并发请求、防反爬虫、分布式爬取、自动重试、日志管理等。同时,Scrapy还提供了强大的数据处理工具,如XPath和CSS选择器,能够使得用户更加轻松地解析网页并提取所需要的信息。因此,Scrapy在反爬虫、数据采集等领域具有广泛的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值