scrapy 框架

本文详细介绍Scrapy爬虫框架的使用流程,包括项目创建、爬虫定义、数据抓取及保存。涵盖常用命令、核心组件及数据处理过程,适合初学者快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数 - 类 - 模块 - 包 - 框架

新建项目

scrapy startproject Baidu

创建一个新scrapy的爬虫:

scrapy genspider baidu “baidu.com

创建一个CrawlSpiders的爬虫

scrapy genspider -t crawl baidu baidu.com

执行爬虫

scrapy crawl baidu 或 scrapy runspider baidu.py
可指定文件格式:
scrapy crawl baidu -o baidu.csv

Scrapy 常用的命令和使用流程:

1. 新建项目

scrapy startproject Baidu

2. 定义items.py的数据字段

3. 新建爬虫

scrapy genspider baidu baidu.com

4. 编写spiders/里的爬虫代码:

5. 编写pipelines的管道代码

6. 通过settings.py 启用相关配置信息

7. 执行爬虫

scrapy runspider baidu.py
或 scrapy crawl baidu

注意:

  1. 如果有多个爬虫执行,所有的爬虫共享 items.pypipelines.pymiddlewares.pysettings.py 文件;

  2. Scrapy支持基本的文件格式保存方案:json、csv、xml、jl等,执行时 scrapy crawl xxxx -o xxxx.json 输出

  3. 除非是自定义函数 调用或返回数据,否则在Scrapy的任何组件里 return/yield,都是将数据返回给引擎处理,引擎会自行判断数据类型,并传递给对应的其他组件。

1.发送请求,获取响应 send_request(request)
urllib2、requests
2. 解析响应,提取数据 parse_page(response)
re、xpath、bs4、jsonpath
3. 保存数据 save_data(item)
mysql、redis、mongodb、json、csv、xml

Scrapy 提供了三大对象:

  1. Request对象
  2. Response对象
  3. Item对象

Scrapy 提供了五个核心组件

  1. Spider爬虫: -1. 提供第一批url地址, -2. 提供的解析响应的方法(url、item)
  2. Scheduler : -1. 对每个请求做去重处理, -2. 将去重的请求放入请求队列(之后会交给下载器)
  3. Downloader : (并发)发送请求,返回响应
  4. Pipeline: 接收并保存item数据
  5. Engine : 负责调用各个组件和传递数据,保证框架的正常工作。

Scrapy 提供了两个可选的中间件:

  1. 下载中间件 Downloader Middlewares : 引擎 <-> 下载器 (请求、响应 的预处理)
  2. 爬虫中间件 Spider Middlewares : 爬虫 <-> 引擎 (请求、item数据、响应)

组件A - 中间件 - 组件B

Scrapy对应下载失败的请求,会有重试操作,总共重试 3 次。

Scrapy的 response 响应主要属性:

response.url # 响应 url地址 非Unicode
response.haeders # 响应报头
response.body # 网页原始编码字符串
response.text # 网页Unicode编码字符串 是Unicode
response.encoding
response.request
response.meta = request.meta

response.xpath("//title/text()") 返回所有匹配结果的表达式列表

再通过 extract() 或 extract_first() 获取字符串内容

extract() : 返回所有结果的字符串列表(没有匹配到数据,返回空列表)
extract_first() : 返回第一个结果的字符串列表(如果没有匹配到数据,返回None)

from lxml import etree
class Response(object):
    def __init__(self):
        self.url = "xxx"
        self.headers = {}
        self.body = requests.get().content
        self.text = requests.get().text


    def xpath(self, rule_str):
        html_obj = etree.HTML(self.body)
        return html_obj.xpath(rule_str)


response = Response()
result_list = response.xpath("//title/text()")

### Scrapy框架使用指南 Scrapy是一个功能强大且灵活的Python爬虫框架,旨在帮助开发人员高效地从网页中提取数据[^1]。以下是关于如何使用Scrapy框架的一些关键点: #### 基本概念 Scrapy的核心理念围绕着Spider类展开,该类定义了如何访问特定网站并从中提取结构化数据。通过继承`scrapy.Spider`类,可以创建自定义蜘蛛来处理不同的目标站点。 #### 安装与配置 要开始使用Scrapy,需先安装它。可以通过pip命令轻松完成这一过程: ```bash pip install scrapy ``` 之后,在项目根目录下运行以下命令初始化一个新的Scrapy项目: ```bash scrapy startproject myproject ``` 这会生成一个标准的文件夹结构,其中包括多个重要组件如items.py、middlewares.py等[^2]。 #### 创建第一个Spider 下面展示了一个简单的例子,演示如何构建一个基础版本的Spider用于抓取指定URL的内容: ```python import scrapy class ExampleSpider(scrapy.Spider): name = 'example' allowed_domains = ['example.com'] start_urls = ['http://www.example.com'] def parse(self, response): self.log('Visited %s' % response.url) ``` 此代码片段展示了最基本的Spider设置方式——设定名称(`name`)、允许域列表(`allowed_domains`)以及起始链接集合(`start_urls`);接着重写parse函数实现逻辑解析响应对象(response)[^3]。 #### 数据存储管道(Pipelines) 为了保存已收集到的数据项至数据库或其他形式持久层介质当中去,通常还需要配置好相应的pipeline机制。例如将JSON格式的结果导出成文件的形式非常常见的一种做法就是利用内置提供的JsonWriterPipeline类或者自己动手编写类似的解决方案。 #### 中间件(Middlewares) 中间件提供了拦截请求和响应的能力,从而可以在不修改原始spiders的情况下改变它们的行为模式。比如UserAgentMiddleware就经常被用来模拟不同浏览器发出HTTP请求头信息以规避反爬策略的影响等等情况下的应用实例之一而已啦! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值