Python Scrapy-如何使用树状结构对网站进行爬网,并将该结构保存在输出的Json文件中
我正在尝试爬网一个具有树结构的网站,我想在输出的json文件中重新创建该树结构 所有的页面都有相同的结构,我必须从一个页面中获取一些字段,然后转到每个链接的子页面并获取相同的字段,等等 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
{"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)