scrapy初探(抓取图片)

  • A+
所属分类:Python

scrapy初探(抓取图片) - 进入python的世界-killeri - CSDN博客

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
结果:
5d661739c194b2004d000012_html_.png

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin