【问题标题】:How to extract data in one FOR loop from JSON multiple dictionary - Python如何从 JSON 多字典中提取一个 FOR 循环中的数据 - Python
【发布时间】:2021-07-08 23:40:42
【问题描述】:

在我的 scrapy 项目中,我想从网站中提取数据。事实证明,所有信息都存储在一些脚本中,我可以轻松地以 JSON 格式读取这些脚本,并从中提取我需要的数据。

这是我的功能:

    def parse(self, response):
        items = response.css("script:contains('window.__INITIAL_STATE__')::text").re_first(r"window\.__INITIAL_STATE__ =(.*);")
        for item in json.loads(items)['offers']:
            yield {
                "title": item['jobTitle'],
                "employer": item['employer'],
                "country": item['countryName'],
                "details_page": item['companyProfileUrl'],
                "expiration_date": item['expirationDate'],
                'salary': item['salary'],
                'employmentLevel': item['employmentLevel'],
            }

而 json 文件有这样的结构:

var = {
    "offers":[
      {
        "commonOfferId":"1200072247",
        "jobTitle":"Automatyk - Programista",
        "employer":"MULTIPAK Spółka Akcyjna",
        "companyProfileUrl":"https://pracodawcy.pracuj.pl/company/20379037/profile",
        "expirationDate":"2021-04-28T12:47:06.273",
        "salary":"",
        "employmentLevel":"Specjalista (Mid / Regular)" ,
        "offers": [
                {
            "offerId":500092126,
            "regionName":"kujawsko-pomorskie",
            "cities":["Małe Czyste (pow. chełmiński)"],
            "label":"Małe Czyste (pow. chełmiński)"}], 

上面的一个元素的例子。因此,当我尝试提取诸如城市或区域名称之类的数据时,我收到一个错误。如何从两个字典中进行 for 循环并将该数据日期生成到新字典?

【问题讨论】:

  • 因此,每个报价都有多个“报价”。你希望你的输出是什么?您是否希望每个内部报价一个条目,因此您可能会获得每个外部报价多个条目?

标签: python json scrapy


【解决方案1】:

你没有说清楚你想要什么,但我猜这很接近:

    def parse(self, response):
        items = response.css("script:contains('window.__INITIAL_STATE__')::text").re_first(r"window\.__INITIAL_STATE__ =(.*);")
        for item in json.loads(items)['offers']:
            for offer in item['offers']:
                yield {
                    "title": item['jobTitle'],
                    "employer": item['employer'],
                    "country": item['countryName'],
                    "details_page": item['companyProfileUrl'],
                    "expiration_date": item['expirationDate'],
                    'salary': item['salary'],
                    'employmentLevel': item['employmentLevel'],
                    'offernumber': offer['offerId'],
                    'region': offer['regionName'],
                    'city': offer['cities'][0]
                }

【讨论】:

  • 这正是我需要的。谢谢
猜你喜欢
  • 2021-06-23
  • 1970-01-01
  • 2022-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
相关资源
最近更新 更多