Python Scrapy-如何使用树状结构对网站进行爬网,并将该结构保存在输出的Json文件中

Python Scrapy-如何使用树状结构对网站进行爬网,并将该结构保存在输出的Json文件中,python,json,tree,scrapy,Python,Json,Tree,Scrapy,我正在尝试爬网一个具有树结构的网站,我想在输出的json文件中重新创建该树结构 所有的页面都有相同的结构,我必须从一个页面中获取一些字段,然后转到每个链接的子页面并获取相同的字段,等等 json文件中的项目输出如下所示(简化): 我之所以能够做到这一点,是为了每页获得一个项目: {"Organiation": [{"Administration": "name_adm", "Rattachement": ["ratt_a", "ratt_b"], "Organisation" = ["orga1

我正在尝试爬网一个具有树结构的网站,我想在输出的json文件中重新创建该树结构

所有的页面都有相同的结构,我必须从一个页面中获取一些字段,然后转到每个链接的子页面并获取相同的字段,等等

json文件中的项目输出如下所示(简化):

我之所以能够做到这一点,是为了每页获得一个项目:

{"Organiation": [{"Administration": "name_adm", "Rattachement": ["ratt_a", "ratt_b"], "Organisation" = ["orga1", "orga2", ...]]}
{"Organiation": [{"Administration": "name_adm", "Rattachement": ["ratt_a", "ratt_b"], "Organisation" = ["orga1", "orga2", ...]]}
etc...
我花了很多时间试图找到一种方法,但没有成功,我探索了递归的选项,但我没有能够使它工作,主要是因为我现在不知道如何使用“回调”递归解析(有关解析函数,请参阅下面的代码)

以下是我到目前为止得到的信息:

def parse(self, response):
    for url in response.xpath('//ul[@class = "list-arrow list-narrow"]/li/a/@href').extract():
        yield scrapy.Request(url, callback=self.parse_dir_contents)

def parse_dir_contents(self, response):
    page = PageItem()  

    page['Administration'] = response.xpath('//div[@class = "panel-body"]/p/span/text()' ).extract()

    Rattachements = []        
    for site in response.xpath('//ul[@class ="list-connected"]/li'):
        Rattachements.append(site.xpath('a/text()').extract())
    page['Rattachement'] = Rattachements

    Organisations = [] 
    for site in response.xpath('//ul[@data-test="organizations"]/li/a'):
        Organisations.append(site.xpath('text()').extract())
    page['Organisation'] = Organisations
    yield page

    URLS = response.xpath('//ul[@data-test="organizations"]/li/a/@href').extract()
    for url in URLS:
        yield scrapy.Request(url, callback=self.parse_dir_contents)
最后一段代码允许我将每一页放在一个项目中:

    URLS = response.xpath('//ul[@data-test="organizations"]/li/a/@href').extract()
    for url in URLS:
        yield scrapy.Request(url, callback=self.parse_dir_contents)
URL是指向给定页面的下一级子页面的链接

当我无法获得树状结构时,下一个最好的想法是将子页面链接的文本列表放入“组织”,但如果我可以获得树状结构,我就不需要将此列表保留在“组织”中

如何更改代码,以便在Json输出中保留网站的树结构

谢谢

尝试使用jsonmerge包将当前输出合并在一起

并在所有合并完成后返回项目,您可以使用空闲处理程序来实现这一点。

尝试使用jsonmerge包将当前输出合并在一起


并在所有合并完成后返回项目,您可以使用空闲处理程序来实现这一点。

能否将页面的源代码发布到粘贴箱并链接到此处?能否将页面的源代码发布到粘贴箱并链接到此处?
    URLS = response.xpath('//ul[@data-test="organizations"]/li/a/@href').extract()
    for url in URLS:
        yield scrapy.Request(url, callback=self.parse_dir_contents)