gpt4 book ai didi

python scrapy : spider follows links but won't download images

转载 作者:太空宇宙 更新时间:2023-11-03 14:36:36 25 4
gpt4 key购买 nike

我已经构建了一个基本的crawlspider,用于从xkcd 中抓取漫画图像,并跟踪每个漫画的链接并继续抓取。蜘蛛可以很好地跟踪链接,但我在实际抓取图像时遇到了麻烦。

我尝试了多个 xpath 和 css 选择器以及编写 parse_item 方法的方法,但由于 scrapy 尝试使用 url 的第一个字母作为完整 url,或者无法散列类型“列表”错误,我要么收到错误,要么收到错误并且已经没有想法了。

蜘蛛:

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule


class XkcdSpider(CrawlSpider):
name = 'xkcd'
allowed_domains = ['xkcd.com']
start_urls = ['http://xkcd.com/']

rules = (
Rule(LinkExtractor(allow=r'\/\d{4}\/', unique=True),
callback='parse_item', follow=True),
)

def parse_item(self, response):
i = {}
relative_url = response.xpath(
'//*[@id="comic"]/img/@src').extract_first()

absolute_url = response.urljoin(relative_url)
i['image_urls'] = absolute_url
return i

项目:

import scrapy


class XkcdItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
images = scrapy.Field()
image_urls = scrapy.Field()

图像管道设置如下:

ITEM_PIPELINES = {
'scrapy.pipelines.images.ImagesPipeline': 1,
}

回溯是这样的:

TypeError: unhashable type: 'list'

或者这个:

ValueError: Missing scheme in request url: h

我的理解是scrapy尝试使用url的第一个字母而不是整个内容,但我找不到让它工作的方法,只尝试了.extract()而不是 extract_first() 但这不起作用。

非常感谢任何帮助

最佳答案

试试这样

srcs = response.xpath('//*[@id="comic"]/img/@src').extract()
i['image_urls'] = [response.urljoin(src) for src in srcs]

您可能已经完成了此操作,但为了以防万一,请务必正确设置 IMAGES_STORE 设置。

关于 python scrapy : spider follows links but won't download images,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46892962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com