scrapy框架总结

本文详细介绍了Scrapy爬虫框架的架构,包括引擎、调度器、中间件和管道等组件的工作流程,并探讨了selenium、phantomjs、Appium等辅助工具的使用。此外,还讲解了数据结构如Request、Response、Spider和Item,以及ItemPipeline在数据清洗和持久化中的作用。同时,提到了模拟登录、HTTP代理和分布式爬虫等进阶话题。

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

1、整体架构

在这里插入图片描述

engine负责数据的转发/调度工作

  1. spiders 发起请求requests经过engine引擎
  2. engine发送到调度器scheduler进行排队,去重
  3. 将排好队的请求再次发给引擎engine
  4. 引擎将请求经过下载中间件(加头,加代理,加cookie,集成selenium)给下载器,异步发请求
  5. 将返回的数据经过中间件返回给引擎
  6. 引擎将返回的数据经过爬虫中间件返回给解析
  7. 解析后将数据再次经过爬虫中间件给引擎,如果解析的数据中还有请求requests对象会继续走2 3 4 5 6 7 8
  8. 引擎将items对象到项目管道做清理,持久化
-crawl_chouti   # 项目名
    -crawl_chouti # 跟项目一个名,文件夹
        -spiders    # spiders:放着爬虫  genspider生成的爬虫,都放在这下面
            -__init__.py
            -work.py # 具体的业务逻辑
        -items.py     # 对比django中的models.py文件 ,写一个个的模型类
        -middlewares.py  # 中间件(爬虫中间件,下载中间件),中间件写在这
        -pipelines.py   # 写持久化的地方(持久化到文件,mysql,redis,mongodb)
        -settings.py    # 配置文件
    -scrapy.cfg       # 不用关注,上线相关的

2、用到的插件

2.1、selenium + phantomjs
selenium可以用于模拟点击
phantomjs可以将页面渲染 然后直接获取里面的内容

2.2、Appium
app的测试框架 功能与selenium相似 用于app上

2.3、mitmproxy
用于拦截网络请求的内容 并进行修改

3、主要数据结构

3.1、Spider

1、request

Request(url, callback=None, method='GET', headers=None, body=None,
                 cookies=None, meta=None)

2、response
有三个实现类
TextResponse
HtmlResponse
XmlResponse

重要的属性:
meta:request传递的字典
selecter: 封装了beautifulsoup 有xpath和css方法
xpath:
css:
urljoin:构建绝对路径

Response(url, status=200, headers=None, body=b'',
                 request=None)

3、spider

//继承Spider
class QuotesSpider(scrapy.Spider):
    name = "quotes"
	//设置初始url
    start_urls = ['https://api.github.com/events'];
	//解析
    def parse(self, response):
    	
3.2、Item

用于自定义数据类 操作和字典类似
Item为基类 Field为定义的字段

class BookItem(scrapy.Item):
	name = field()
3.3、Item pipeline

清洗数据
验证数据有效性
过滤重复数据
存入数据库

1、实现process_item.py

//打开关闭只会执行一次 可以做初始化操作
def open_spider(self, spider)
def close_spider(self, spider)
//执行具体逻辑
def process_item(self, item, spider)

2、在settings.py中配置
pipeline会按照顺序执行 后面数字越小 越先执行

ITEM_PIPELINES = {
    'tutorial.pipelines.TutorialPipeline': 300,
}
3.4、下载文件、图片

FilesPipeline/ImagePipline

3.5、模拟登录

FormRequest

3.6、http代理
3.7、分布式爬虫

参考:
https://github.com/wistbean/learn_python3_spider
https://www.cnblogs.com/Mr-shen/p/12676185.html
<精通scrapy网络爬虫.pdf>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值