「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战」
前言
Scrapy框架是专门用于实现爬虫的一个框架,其数据处理部分,均在Pipelines层中实现,因此,通过修改Pipelines层,就可以实现图片的保存或其他数据处理操作。
基本设置
在开始进行爬虫之前,需要先进行一些设置,例如:
- 设置默认请求头;
- 设置下载路径(需要自行添加IMAGES_STORE字段,setting.py中原来是没有的);
- 启动Pilelines(把原本的注释取消掉即可)
代码如下:
# setting.py
# 关闭爬虫协议验证
ROBOTSTXT_OBEY = False
# 设置默认请求头
DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
}
# 设置下载路径
# 启动pipeline
import os
IMAGES_STORE = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'images')
ITEM_PIPELINES = {
'session_2.pipelines.Session2Pipeline': 300,
}
# 启动下载器
DOWNLOADER_MIDDLEWARES = { 'session_2.middlewares.Session2DownloaderMiddleware': 543, }
复制代码
编写Pipeline
需要实现图片的下载,我们需要让自己的pipeline继承scrapy框架的ImagesPipeline。scrapy框架在此pipeline中封装了图片下载操作(并发下载,速度可以保证)。
由于scrapy封装十分完善,我们只需要覆写get_media_requests函数,将图片的url通过yield Request(item['url'])传递给下载操作:
# pipelines.py
from scrapy import Request
from scrapy.pipelines.images import ImagesPipeline
class Session2Pipeline(ImagesPipeline):
# 继承ImagesPipeline
def get_media_requests(self, item, info):
print(item['url'])
yield Request(item['url'])
复制代码
在scrapy爬虫框架启动后,文件会根据setting.py中设置的IMAGES_STORE,将图片保存在IMAGES_STORE/full目录下。
传递url
item中至少需要一个url参数(其他参数与本教程无关,就省略了):
# item.py
import scrapy
class Session2Item(scrapy.Item):
# define the fields for your item here like:
url = scrapy.Field()
复制代码
在主爬虫函数中,使用yield Session2Item(url=img)将url传递给Pipeline,解析部分,可以使用CSS、XPath或是re,可以根据自己的熟练程度和喜好自行选择,这里也就不再赘述了:
# main.py
yield Session2Item(url=img)
复制代码




近期评论