今天还是带来的是一个用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文件了,嗯!还有怎么设置图片的大小什么的。
额。。。。。。。。。。。。。
有什么问题欢迎和我一起交流哦!