🎈🎈作者主页: 喔的嘛呀🎈🎈
🎈🎈所属专栏:python爬虫学习🎈🎈
✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨
兄弟姐妹,大家好哇!我是喔的嘛呀。今天我们来学习 scrapy的第二部分。

在Scrapy框架中,Item Pipeline是一个用于处理爬虫抓取到的数据的关键组件。它负责接收由Spiders(爬虫)提取出的Item(实体),并对这些Item进行进一步的处理,如清洗、验证和持久化等。Item Pipeline提供了灵活的方式,以便将抓取的数据按照我们的需求进行存储或进一步处理。
以下是Item Pipeline的主要作用:
要编写自定义的Pipeline,你需要遵循以下步骤:
scrapy.pipelines.Pipeline的Python类。在这个类中,你可以定义一些方法,如process_item,来处理传入的Item。process_item方法:process_item方法是Pipeline类中的核心方法,它接收一个Item和一个Spider作为参数。在这个方法中,你可以实现数据清洗、验证和持久化等逻辑。settings.py文件中,你需要添加你的Pipeline类的路径到ITEM_PIPELINES设置中,并为其分配一个优先级数字。这个数字决定了Pipeline的执行顺序,数字越小,优先级越高。下面是一个简单的自定义Pipeline示例:
- # myproject/pipelines.py
-
- class MyCustomPipeline(object):
-
- def __init__(self):
- # 初始化方法,可以在这里建立数据库连接等
- self.connection = ...
-
- def open_spider(self, spider):
- # 在Spider打开时调用,可以用于执行一些启动时的任务
- pass
-
- def close_spider(self, spider):
- # 在Spider关闭时调用,可以用于执行一些清理任务,如关闭数据库连接等
- self.connection.close()
-
- def process_item(self, item, spider):
- # 处理Item的方法,你可以在这里实现数据清洗、验证和持久化等操作
- # 假设item['data']是需要存储的数据
- cleaned_data = self.clean_data(item['data'])
- if self.validate_data(cleaned_data):
- self.store_data(cleaned_data)
- return item # 如果处理成功,返回Item以便进行后续的Pipeline处理
- else:
- raise DropItem("Invalid data: %s" % item) # 如果验证失败,则丢弃该Item
-
- def clean_data(self, data):
- # 数据清洗逻辑
- ...
-
- def validate_data(self, data):
- # 数据验证逻辑
- ...
-
- def store_data(self, data):
- # 数据持久化逻辑,例如存储到数据库
- ...
然后,在你的settings.py文件中配置Pipeline:
- # myproject/settings.py
-
- ITEM_PIPELINES = {
- 'myproject.pipelines.MyCustomPipeline': 300, # 数字是优先级,可以根据需要调整
- }
通过编写自定义的Pipeline,你可以根据自己的需求灵活地处理爬虫抓取到的数据,实现数据清洗、验证和持久化等功能。
在Scrapy框架中,中间件(Middleware)是一个非常重要的组件,它允许开发者在Scrapy引擎处理请求和响应的过程中插入自定义的代码。中间件位于Scrapy引擎和下载器之间,用于拦截、修改、或添加额外的逻辑到请求和响应中。通过中间件,你可以轻松实现如设置代理、添加请求头、处理异常等功能。
中间件是一种插件式的组件,用于在Scrapy处理请求和响应的过程中添加额外的功能。Scrapy提供了请求中间件(Request Middleware)和响应中间件(Response Middleware)两种类型。请求中间件在请求被下载器发送之前处理请求,而响应中间件在响应被引擎处理之前处理响应。
要编写自定义的中间件,你需要创建一个Python类,并实现特定的方法。这些方法会在请求或响应被处理时自动调用。
以下是一个简单的自定义请求中间件的示例:
- class CustomRequestMiddleware:
-
- def process_request(self, request, spider):
- # 在请求被发送之前修改请求,比如添加请求头
- request.headers['Custom-Header'] = 'Custom Value'
- return None # 返回None表示继续处理请求
-
- def process_exception(self, request, exception, spider):
- # 处理请求过程中发生的异常
- # 可以选择记录日志、重试请求或返回None
- return None # 返回None表示继续抛出异常
同样地,你也可以创建自定义的响应中间件:
- class CustomResponseMiddleware:
-
- def process_response(self, request, response, spider):
- # 在响应被处理之前修改响应,比如检查响应状态码
- if response.status != 200:
- return self._handle_error(request, response, spider)
- # 处理或返回响应
- return response
-
- def _handle_error(self, request, response, spider):
- # 处理响应错误的逻辑,比如记录日志或重试请求
- pass
-
- def process_exception(self, request, exception, spider):
- # 处理在下载过程中发生的异常
- # 可以选择记录日志、重试请求或返回None
- return None # 返回None表示继续抛出异常
中间件在Scrapy爬虫中有许多应用场景,以下是一些常见的例子:
要启用自定义的中间件,你需要在Scrapy项目的settings.py文件中配置它们。对于请求中间件,你需要将它们添加到DOWNLOADER_MIDDLEWARES设置中;对于响应中间件,你需要将它们添加到SPIDER_MIDDLEWARES设置中。每个中间件都需要一个唯一的键(通常是中间件类的路径)和一个整数值来表示它的优先级。数值越小,优先级越高。
- # settings.py
-
- DOWNLOADER_MIDDLEWARES = {
- 'myproject.middlewares.CustomRequestMiddleware': 543,
- }
-
- SPIDER_MIDDLEWARES = {
- 'myproject.middlewares.CustomResponseMiddleware': 543,
- }
通过编写和使用中间件,你可以灵活地扩展Scrapy的功能,满足各种复杂的爬虫需求。
Scrapy 设置与配置是控制爬虫行为的重要方面,通过调整不同的设置,你可以定制爬虫的行为以满足特定的需求。以下是关于 Scrapy 设置和配置的基本介绍,以及如何调整并发和延迟来优化爬虫性能。
Scrapy 框架提供了一套默认的设置,这些设置可以在 Scrapy 项目的 settings.py 文件中进行自定义。通过修改这些设置,你可以控制爬虫的行为、性能以及数据处理等方面。
一些常见的 Scrapy 设置包括:
ROBOTSTXT_OBEY: 控制爬虫是否遵守 robots.txt 文件中的规则。CONCURRENT_REQUESTS: 并发请求的最大数量,用于控制爬虫同时发送的请求数。DOWNLOAD_DELAY: 下载器在连续发送请求之间的延迟时间(秒),用于控制爬虫发送请求的速率。RETRY_TIMES: 请求失败时的重试次数。RETRY_HTTP_CODES: 需要重试的 HTTP 状态码列表。DUPEFILTER_CLASS: 重复请求过滤器的类名,用于去除重复的请求。ITEM_PIPELINES: Item Pipeline 的配置和顺序。LOG_LEVEL: 控制日志输出的级别。你可以在 settings.py 文件中添加或修改这些设置来定制你的爬虫。例如:
- python复制代码
- # settings.py# 并发请求数CONCURRENT_REQUESTS = 16# 请求之间的延迟时间(秒)DOWNLOAD_DELAY = 3# 重试次数RETRY_TIMES = 3# 其他自定义设置...
调整并发请求数和请求超时时间等设置是优化爬虫性能的关键。以下是一些建议:
并发请求数 (CONCURRENT_REQUESTS):
请求之间的延迟 (DOWNLOAD_DELAY):
超时时间:
DOWNLOAD_TIMEOUT 设置请求的超时时间。如果请求在这个时间内没有响应,Scrapy 会认为请求失败。自动调整设置:
AUTOTHROTTLE_ENABLED 和相关设置,可以自动调整请求延迟,以根据网站的响应速度动态控制爬虫的速度。调整这些设置时,建议逐步进行,并观察爬虫的性能和目标网站的响应。通过不断地尝试和调整,你可以找到最适合你爬虫的设置组合。
最后,记得在修改完设置后,重新启动你的 Scrapy 项目以使新的设置生效。
好了,今天的学习就到这里了,我们明天再见啦!拜拜!