Scrapy 爬取图片,本章采用半自定义方法,使用scrapy爬虫爬取图片。
这里我们以美食杰为例,爬取它的图片作为演示,这里只爬取一页,如图所示:
爬取图片的工作分成如下六个步骤来完成
创建项目
首先我们在命令行进入到我们要创建的目录,执行如下指令创建爬虫项目。
scrapy startproject meishi
输出结果如图所示:
生成爬虫
然后执行指令cd meishi
,进入到meishi文件夹,执行如下指令生成爬虫。
scrapy genspider mei meishij.net
输出结果如图所示:
xpath抓取图片
点进上图所示的mei.py
文件,这里需要注意,要将start_urls[]
改为我们要爬取的Url地址:
https://www.meishij.net/china-food/caixi/chuancai/
这里使用xpath
爬取图片,如代码所示:
class MeiSpider(scrapy.Spider):
name = 'mei'
allowed_domains = ['meishij.net']
start_urls = ['https://www.meishij.net/china-food/caixi/chuancai/']
def parse(self, response):
src_list = response.xpath('//div[@class="listtyle1"]/a/img/@src').extract()
for src in src_list:
print(src)
执行爬虫程序,查看结果是否符合预期:
scrapy crawl mei --nolog
执行结果如图所示,说明程序符合预期
配置item文件
进入到items
文件,用它来处理刚刚得到的文件
class MeishiItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
src = scrapy.Field()
进入到mei.py
文件,引入items
这个文件的函数,并进行输出,因为src是图片,所以要用[]
括起来
import scrapy
from ..items import MeishiItem
class MeiSpider(scrapy.Spider):
name = 'mei'
allowed_domains = ['meishij.net']
start_urls = ['https://www.meishij.net/china-food/caixi/chuancai/']
def parse(self, response):
src_list = response.xpath('//div[@class="listtyle1"]/a/img/@src').extract()
for src in src_list:
item = MeishiItem()
item['src'] = [src]
yield item
配置settings文件
在settings.py
里进行设置,大致在67行前后的位置,自定义下载。
IMAGES_STORE = ''
里面写图片保存的路径
IMAGES_URLS_FIELD=''
里面写接收图片的变量
# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
# 'meishi.pipelines.MeishiPipeline': 300,
'scrapy.pipelines.images.ImagesPipeline':1
}
IMAGES_STORE = 'images'
IMAGES_URLS_FIELD = 'src'
测试结果
在命令行执行指令 scrapy crawl mei
点击确认,看到如图所示,恭喜你,图像爬取成功!