炫意html5
最早CSS3和HTML5移动技术网站之一

Scrapy 爬取图片方法二

Scrapy 爬取图片方法二,本章采用系统方法爬取图片,前一章节的方法虽然能爬取下来图片,但是图片的名字是scrapy 根据某些规则(哈希) 为我们命名的,但是我们想用图片原本的名字进行命名时,这种方法就明显不行了, 这时就需要另外一种办法来解决。

下面将以站长素材网为例,爬取图标,并根据名字保存下来。
Scrapy 爬取图片方法二

编辑 Spider

前面已经介绍了如何创建scapy的方法,这里不再赘述,还是和前一章节,使用xpath提取我们想要的数据。
创建爬虫项目

scrapy startproject chinaz

创建爬虫

scrapy genspider tubiao sc.chinaz.com

通过xpath提取数据,这里我们需要两个数据,一个是标题,一个是每一个图片的链接地址

import scrapy
from ..items import ChinazItem
class TubiaoSpider(scrapy.Spider):
name = 'tubiao'
allowed_domains = ['sc.chinaz.com']
start_urls = ['http://sc.chinaz.com/tubiao/']
def parse(self, response):
href_list = response.xpath('//div[@class="text_left"]//li/span/a/@href').extract()
for href in href_list:
yield scrapy.Request(url=href, callback=self.get_info)
def get_info(self, response):
div_list = response.xpath('//div[@class="all_wrap"]//div[@class="left"]')
for div in div_list:
title = div.xpath('.//div[2]/h2/a/text()').extract_first('')
src_list = div.xpath('.//div[@class="png_pic"]/img/@src').extract()
for src in src_list:
item = ChinazItem()
item['title'] = title
item['src'] = [src]
yield item

配置settings

在settings.py里进行设置,大致在67行前后的位置

# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
#    'chinaz.pipelines.ChinazPipeline': 300,
'chinaz.pipelines.ChinazPipeline': 1,
}
IMAGES_STORE = 'images'

编辑 pipelines

关于下载的函数, 我们进入到pipelines.py 文件进行修改(也可以全部重写),但是函数的名字是固定的。

import scrapy
from scrapy.pipelines.images import ImagesPipeline
class ChinazPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
yield scrapy.Request(url=item['src'][0],meta={'item':item})
def file_path(self, request, response=None, info=None):
item = request.meta['item']
# 设置图片的路径为  类型名称/url地址
# 这是一个图片的url: http://pics.sc.chinaz.com/Files/pic/icons128/7065/z1.png
# 这句代码的意思是先取出图片的url,[0]表示从列表转成字符串
# split分割再取最后一个值,这样写是让图片名字看起来更好看一点
image_name = item['src'][0].split('/')[-1]
path = item['title'] + image_name
return path

查看运行结果

命令行执行指令运行爬虫

crapy crawl tubiao

看到运行结果如图所示,恭喜你,图像爬取成功!
Scrapy 爬取图片方法二

炫意HTML5 » Scrapy 爬取图片方法二

Java基础教程Android基础教程