前言
scrapy是python中比较常用的爬虫框架,下面让我们了解一下如何用scrapy,去下载保存图片
对于安装scrapy,本文就是不在叙述安装过程
第一步
创建scrapy的爬虫文件命令也很简单之前的文章中有写也就不再叙述了
编写spider
这里以我写的爬虫为例
# 引入scrapy
import scrapy
from ..items import HippoItem
class FengjingSpider(scrapy.Spider):
name = 'fengjing' #spider的名称
allowed_domains = ['hippopx.com'] # 对爬虫的划定的范围
start_urls = ['https://www.hippopx.com/zh/search?q=%E9%A3%8E%E6%99%AF'] #开始爬取url
def parse(self, response):
# 首先对网页中图片的url进行提起
urls = response.xpath('//*[@id="mainlist"]/li/figure/a/img/@src').extract()
# 因为返回的是列表所以要将他们循环出来
for url in urls:
# 实例化我们的item
item = HippoItem()
# 赋值
item['url'] = url
name = url.split('/')[-1]
item['name'] = name
yield item
# 翻页模块
next_page = response.xpath('/html/body/main/section/div/a[2]/@href').extract_first()
if next_page:
yield scrapy.Request(next_page,callback=self.parse)
items文件的设置
在这里需要设置两个参数
内容如下:
import scrapy
class HippoItem(scrapy.Item):
url = scrapy.Field()
name = scrapy.Field()
piplines(下载图片中最重要的设置)
需要我们导ImagesPipeline
这个模块是scrapy提供的用于下载图片的模块
from scrapy.pipelines.images import ImagesPipeline
from scrapy.http import Request
# useful for handling different item types with a single interface
from itemadapter import ItemAdapter
class HippoPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
image_url = item['url']
yield Request(image_url,meta={'item':item})
def file_path(self, request, response=None, info=None, *, item=None):
item = request.meta['item']
filepath = item['name']
return filepath
def item_completed(self, results, item, info):
return item
在setting文件中注册
如果setting文件中没有的也就是要复制上去的
其中LOG_LEVEL = "WARNING"是调整日志基本也就是说在运行scrapy项目时控制台不会输出以片片的红色代码了
IMAGES_STORE = './images'
LOG_LEVEL = "WARNING"
ITEM_PIPELINES = {
'hippo.pipelines.HippoPipeline': 300,
}
MEDIA_ALLOW_REDIRECTS = True
DOWNLOAD_DELAY = 3
ROBOTSTXT_OBEY = False
创建run文件
创建它的目的就是为了方便我们运行scrapy项目
from scrapy.cmdline import execute
execute('scrapy crawl fengjing'.split())
愿君前程似锦,未来可期去💯,感谢您的阅读,如果对您有用希望您留下宝贵的点赞和收藏