使用scrapy爬取图片,自己处理下载和使用scrapy处理下载

博客介绍了两种图片下载方式。一是常规方法,获取图片链接后用常规下载方法,无需设置item.py、pipelines.py等文件。二是使用Scrapy处理图片下载,需编写item.py、爬虫主文件实例化item、处理pipelines.py文件,在setting.py中启用ImagePipeline,确保下载路径正确。

  自己处理下载时不需要设置item.py,pipelines.py等这些文件,这些文件保持默认便可,只需要自己用css也好,xpath也好,获取到图片链接之后,使用常规的图片下载方法,下载图片即可,像下面这样:

        try:
            os.makedirs(root_path)
        except FileExistsError:
            pass
        r = requests.get(img_url, headers=headers)
        with open(root_path + img_name, 'wb') as f:
            f.write(r.content)

  就不多讲了,下面讲使用scrapy处理图片下载,下面的内容都是在你已经正确获取到了图片链接的前提下。

  

  首先,编写item.py文件:

class ImagesItem(scrapy.Item):
    file_name = scrapy.Field()
    img_urls = scrapy.Field()

  上面的file_name为文件保存路径,img_urls为图片下载的链接。

  然后爬虫主文件中实例化item:

        item = ImagesItem()
        item['file_name'] = root_path + img_name
        item['img_urls'] = img_url
        yield item

  接着就是处理下载的pipelines.py文件了:

class ImagePipeline(ImagesPipeline):
    def get_media_requests(self, item, info):
        for img_url in item['img_urls']:
            yield Request(img_url, meta={'name': item['file_name']})

    def file_path(self, request, response=None, info=None):
        filename = request.meta['name']
        return filename

  之后就是在setting.py中启用ImagePipeline了:

IMAGES_STORE = 'D:\\'

ITEM_PIPELINES = {
   'images.pipelines.ImagePipeline': 300,
}

  注意这里的IMAGE_STORE是下载路径,会和上面的filename进行拼接,请确认自己设置的IMAGE_STORE和filename拼接出来的路径正确,如果没有意外,到这里运行爬虫之后已经可以正常爬取图片到设定的文件夹了。

转载于:https://www.cnblogs.com/sirfers/p/10918371.html

使用Scrapy爬取起点中文网的图片可以通过以下步骤实现: 1. **安装Scrapy**:首先,确保你的环境中已经安装了Scrapy。如果没有安装,可以使用pip进行安装: ```bash pip install scrapy ``` 2. **创建Scrapy项目**:在你的工作目录下创建一个新的Scrapy项目: ```bash scrapy startproject qidian_images ``` 3. **创建爬虫**:进入项目目录并创建一个新的爬虫: ```bash cd qidian_images scrapy genspider qidian_spider qidian.com ``` 4. **编写爬虫代码**:打开`qidian_spider.py`文件,编写爬虫代码。以下是一个示例代码,用于爬取起点中文网的小说封面图片: ```python import scrapy from scrapy.http import Request class QidianSpiderSpider(scrapy.Spider): name = 'qidian_spider' allowed_domains = ['qidian.com'] start_urls = ['https://www.qidian.com/'] def parse(self, response): # 找到所有小说封面图片的URL image_urls = response.css('img.cover::attr(src)').getall() for image_url in image_urls: if image_url.startswith('//'): image_url = 'https:' + image_url yield Request(image_url, callback=self.save_image) def save_image(self, response): # 获取图片的URL image_url = response.url # 获取图片的二进制内容 image_content = response.body # 获取图片的文件名 image_name = image_url.split('/')[-1] # 保存图片到本地 with open(f'images/{image_name}', 'wb') as f: f.write(image_content) ``` 5. **运行爬虫**:在项目目录下运行爬虫,并指定输出目录: ```bash scrapy crawl qidian_spider -o images.json ``` 6. **保存图片**:为了将图片保存到本地,需要在`settings.py`文件中添加以下配置: ```python import os IMAGES_STORE = os.path.join(os.path.dirname(__file__), 'images') ``` 并在`settings.py`中启用图片下载中间件: ```python ITEM_PIPELINES = { 'scrapy.pipelines.images.ImagesPipeline': 1, } IMAGES_URLS_FIELD = 'image_urls' IMAGES_STORE = 'images' ``` 7. **启动爬虫**:确保你已经创建了`images`文件夹,然后启动爬虫: ```bash scrapy crawl qidian_spider ``` 通过以上步骤,你可以使用Scrapy爬取起点中文网的图片并保存到本地。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值