Scrapy 从其他链接获取值

Scrapy getting values from other links

def parse(self, response):
    list = {
        "name": response.css("#title::text").extract_first(),
        "images": []
    }

    for image in response.css("#images_link a::attr(href)").extract():
        list["images"].append(yield scrapy.Request(url=image, callback=self.parse_image))
        
    yield list
    
def parse_image(self, response):
    return [response.css("img::attr(alt)").extract(), response.css("img::attr(src)").extract()]

我想抓取一个页面并抓取它的一些子链接并将它们附加到 list 的主要对象,但它 returns 返回许多对象而不是一个

怎么做才对?

最好将“列表”重命名为其他名称。

请求不能那样工作,您需要传递项目(示例中的“dict1”)。

这是一个例子(因为你没有提供网站的 url 我无法检查,但我希望你明白了):

import scrapy


class ExampleSpider(scrapy.Spider):
    name = "exampleSpider"
    start_urls = ['https://www.example.com']

    def parse(self, response):
        dict1 = {
            "name": response.css("#title::text").get(),
            "images": []
        }

        images_urls = response.css("#images_link a::attr(href)").getall()

        if images_urls:
            scrapy.Request(url=images_urls[0],
                           callback=self.parse_image,
                           cb_kwargs={'dict1': dict1, 'images_urls': images_urls[1:]})

    def parse_image(self, response, dict1, images_urls):
        if images_urls:
            dict1['images'].append([response.css("img::attr(alt)").getall(), response.css("img::attr(src)").getall()])
            scrapy.Request(url=images_urls[0],
                           callback=self.parse_image,
                           cb_kwargs={'dict1': dict1, 'images_urls': images_urls[1:]})
        else:
            yield dict1

阅读这些: request objects, passing additional data to callback functions