【问题标题】:Scrapy getting values from other linksScrapy 从其他链接获取值
【发布时间】:2022-01-24 04:20:51
【问题描述】:
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 的主要对象,但它返回许多对象而不是一个

怎么做才对?

【问题讨论】:

    标签: python scrapy


    【解决方案1】:

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

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

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

    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

    【讨论】:

    • 所以唯一的方法是在删除我们解析的部分后使用新的数据字典循环请求自身?
    • 这不是唯一的方法,但我觉得它很方便。
    • 还有什么我想学习的方法谢谢大家
    • 您可以例如创建一个counter 并检查它是否大于images_urls 的长度,如果是则生成该项目,如果不是则递归生成一个scrapy请求并传递该项目和网址列表。
    猜你喜欢
    • 2012-03-09
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    相关资源
    最近更新 更多