Scrapy 从其他链接获取值

Posted

技术标签:

【中文标题】Scrapy 从其他链接获取值【英文标题】:Scrapy getting values from other links 【发布时间】: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 的主要对象,但它返回许多对象而不是一个

怎么做才对?

【问题讨论】:

【参考方案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请求并传递该项目和网址列表。

以上是关于Scrapy 从其他链接获取值的主要内容,如果未能解决你的问题,请参考以下文章

从多个链接获取数据,同时存储在 Scrapy 中的一项中

Scrapy:努力实现爬网蜘蛛

scrapy爬虫框架

scrapy仅遵循一个深度的外部链接

在Scrapy中递归折叠二级链接

使用 python-Scrapy 抓取动态内容