将相同的数据分组到一个单一的字典中,同时进行刮擦。

我正试图从以下资料中搜索国家名称、GDP和人口。本网站. 我正在使用 ScrapyPython 3.7. 问题是我在字典中得到了所有的国家数据,在字典中得到了所有的GDP数据,在字典中得到了所有的人口数据。但我想在字典中得到相应的国家数据、GDP和人口数据。

这是我的代码。

import scrapy

class DebtByCountriesSpider(scrapy.Spider):
    name = 'debt_by_countries'
    allowed_domains = ['worldpopulationreview.com/countries/countries-by-national-debt']
    start_urls = ['https://worldpopulationreview.com/countries/countries-by-national-debt/']

    def parse(self, response):

        # countries = response.xpath("//td/a/text()").getall()

        countries = response.xpath("//tbody/tr/td/a/text()").getall()
        GDP = response.xpath("//tbody/tr/td[2]/text()").getall()
        population = response.xpath("//tbody/tr/td[3]/text()").getall()


        yield{
            "country_name": countries,
            "GDP": GDP,
            "population": population

        }

这是我代码的输出

Output 1

但这是我想要的(包括人口)。

What I want

解决方案:

使用 zip我们可以为每个国家创建一个字典,然后从那里产生。

for country, gdp, pop in zip(countries, GDP, population):
    yield {"country_name": country, "GDP": gdp, "population": pop}

为什么你的代码不起作用,原因是生成器只会生成一个巨大的字典,其中每个值都是整个列表。countries, GDPpopulation分别为,。为了解决这个问题,您需要为每个国家创建一个字典,并为每个国家的每个元素创建一个 next 调用,如上图所示。

要测试生成器,请尝试

gen = parse(response) # or self.parse(response) depending on context
print(next(gen))
print(next(gen))

每次 next 调用,生成器将产生一个与新国家相对应的不同字典。

给TA打赏
共{{data.count}}人
人已打赏
未分类

函数,当通过一行中的正值时,返回列名,否则返回字符串 "Not Available"。

2022-9-8 15:57:21

未分类

如何只获得表和视图?(SQL Server)

2022-9-8 15:57:23

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索