如标题中所述,我希望用项目路径名替换图像路径名,下面是我的示例:
运行我的scrapy,我得到的文件为标准的SHA1哈希格式。
如果可能的话,我也会很感激,如果它可以得到第一个图像,而不是整个集团。
URL名称-https://www.antaira.com/products/10-100Mbps/LNX-500A预期的图像名称-LNX-500A.jpg
Spider.py
from copyreg import clear_extension_cache
import scrapy
from ..items import AntairaItem
class ImageDownload(scrapy.Spider):
name = 'ImageDownload'
allowed_domains = ['antaira.com']
start_urls = [
'https://www.antaira.com/products/10-100Mbps/LNX-500A',
]
def parse_images(self, response):
raw_image_urls = response.css('.image img ::attr(src)').getall()
clean_image_urls = []
for img_url in raw_image_urls:
clean_image_urls.append(response.urljoin(img_url))
yield {
'image_urls' : clean_image_urls
}
pipelines.py
from scrapy.pipelines.images import ImagesPipeline
import json
class AntairaPipeline:
def process_item(self, item, spider):
# calling dumps to create json data.
line = json.dumps(dict(item)) + "\n"
self.file.write(line)
return item
def open_spider(self, spider):
self.file = open('result.json', 'w')
def close_spider(self, spider):
self.file.close()
class customImagePipeline(ImagesPipeline):
def file_path(self, request, response=None, info=None):
#item-request.meta['item'] # Like this you can use all from the item, not just url
#image_guid = request.meta.get('filename', '')
image_guid = request.url.split('/')[-1]
#image_direct = request.meta.get('directoryname', '')
return 'full/%s.jpg' % (image_guid)
#Name thumbnail version
def thumb_path(self, request, thumb_id, response=None, info=None):
image_guid = thumb_id + response.url.split('/')[-1]
return 'thumbs/%s/%s.jpg' % (thumb_id, image_guid)
def get_media_requests(self, item, info):
#return [Request(x, meta={'filename': item['image_name']})
# for x in item.get(self.image_urls_field, [])]\
for image in item['images']:
yield Request(image)
我知道有一种方法可以获得 meta数据,但我希望它有项目的名称产品,如果可能的图像,谢谢。
编辑-
原始文件名称- 12f6537bd206cf58e86365ed6b7c1fb446c533b2.jpg
所需文件名-“LNX_500A_01.jpg”-如果不止一个,则使用start_url路径的最后一部分,如果不是“LNX_500A.jpg”
1条答案
按热度按时间acruukt91#
我提取了项目的名称和所有带有
xpath
表达式的图片,然后在图片管道中将项目名称和文件编号添加到requests
meta关键字arg
中,然后在管道的file_path
方法中将这两项相加。您可以很容易地拆分
request url
并将其用作文件名,这两种方法都可以实现。另外,由于某种原因,我没有得到任何图像在所有与
css
选择器,所以我切换到一个xpath
表达式。如果css
为您工作,那么你可以切换回来,它应该仍然工作。蜘蛛程序文件
项目.py
管道.py
设置.py
使用所有这些并运行
scrapy crawl ImageDownloads
,它将创建以下目录:这些是创建的文件。
第一个字符