scrapy初探(抓取图片)

今天还是带来的是一个用scrapy抓取图片的实战项目

这次用scrapy的图片管道进行,下一篇我会讲解用自制管道进行图片的下载哦!

具体的步骤你们可以去官网看看

我这里主要会将一些步骤和常见的坑。。。

这次我们先将settings.py文件,因为这次的坑主要会在这个文件中,对于抓取链接什么的,在前两篇文章已经将的很清楚了。

由于是要抓取图片,所以这次在settings中的相关设置会有些不一样。和往常一样,我们要打开这些设置:

USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'
DOWNLOAD_DELAY = 3
# 下载延迟和请求用户的掩饰

接下来有一些关键的设置

ITEM_PIPELINES = {
   'scrapy.pipelines.images.ImagesPipeline':300
}
# 使用scrapy的下载图片的专用管道(这里使用默认,下一讲用自己定义的管道)
IMAGES_STORE = 'D:/scrapy项目/pictureproject/pictures'
# 图片下载的地址
IMAGES_URLS_FIELD = 'our_image_urls'
# 爬取的图片的链接
IMAGES_RESULT_FIELD = 'our_images'
# 存储图片信息的

注意:
一、第一个TIEM_PIPELINES中我们传入的是下载图片的管道,与之前的不一样(默认会给我们传入项目建立时生成的管道,需要修改)

二、还有就是,IMAGES_URLS_FIELD和IMAGES_RESULTE_FIELD的值使我们在items中定义的,如果我们不再items中定义,images_urls和images就是默认的值(请下面查看items.py文件)

ROBOTSTXT_OBEY = False
# 是否遵守机器人协议,默认值是True,改为False

每个网站都会有一个robot.txt文件,里面规定了机器人爬取的一些规定,但对于爬取的图片的网站来说,一般对定是不允许进行爬取图片的,所以不能遵守(额。。。其实官方是建议遵守 的)

好了,以上是settings.py文件的设置

接下来是items.py文件
代码如下:

import scrapy


class PictureprojectItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    our_image_urls = scrapy.Field()
    our_images = scrapy.Field()
# 这里我们自己定义了图片链接和信息存放的item

如上面说的,我们如果不再这里定义item的话,就会用image_urls和images做为存放的item
那样的话,代码就很简单了
首先setting.py里面:

IMAGES_URLS_FIELD = 'image_urls'
IMAGES_RESULT_FIELD = 'images'
# 这两个是不需要的

接下来items.py里面:

import scrapy


class PictureprojectItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
     pass

这样的话就会按默认的来。。。。。。。

最后就是一个爬虫的文件了,这个文件你只要爬取了图片链接信息并存储到item里面,不过这里面也会有一个坑,注意一下
代码如下:

import scrapy
from pictureproject.items import PictureprojectItem


class PicturespiderSpider(scrapy.Spider):
    name = 'picturespider'
    allowed_domains = ['pixabay.com']
    start_urls = ['https://pixabay.com/en/users/Free-Photos-242387/']

    def parse(self, response):
        picture_url = response.xpath('.//div[@class="flex_grid credits"]/div[@class="item"]')
        for picture in picture_url:
            pic = picture.xpath('./a/img/@src').extract()
            # 坑在这里,图片的链接必须是含一个元素的数组
            item = PictureprojectItem(our_image_urls=pic)
            # 如果选择默认值,将our_image_urls改为image_urls就可以了
            yield item

这样就可以爬取图片了,当然,网站自选,爬虫的编写自选。

对了,最后将一下我们的pipelines.py文件
额。。。你不用动它。

输入:scrapy crawl picturespider
结果:
这里写图片描述

下一篇我们会讲到怎么自制图片下载的管道,那时候就要动用pipilines.py文件了,嗯!还有怎么设置图片的大小什么的。

额。。。。。。。。。。。。。
有什么问题欢迎和我一起交流哦!

猜你喜欢

转载自blog.csdn.net/killeri/article/details/80222447
今日推荐