【问题标题】:How to retrieve info out of JSON? [duplicate]如何从 JSON 中检索信息? [复制]
【发布时间】:2019-03-02 15:28:25
【问题描述】:

我用 Python 构建了一个爬虫。当我放置一个静态 URL 时它可以工作,但我想使用 JSON 文件为每个 URL 循环创建一个。

此代码返回错误,KeyError。我在网上说这是因为它是一个对象而不是数组。我不知道如何解决这个问题。有人可以以正确的方式指出我,甚至可以查看代码吗?我放置了一些错误的屏幕截图,我查找 JSON 信息的方式以及 JSON 文件的结构方式。

JSON 结构:

from bs4 import BeautifulSoup
import requests
import json

with open("C:\data.json") as my_json:
    json_dict = json.load(my_json)
for website in json_dict[0][0]:
    print("About to scrape: ", website)


print('step 1')
#get url
page_link = website
print('step 2')
#open page
page_response = requests.get(page_link, timeout=1)
print('step 3')
#parse page
page_content = BeautifulSoup(page_response.content, "html.parser")
print('step 4')
#Find info
naam = page_content.find_all(class_='<random class>')[0].decode_contents()
print('step 5')
#Print
print(naam)

【问题讨论】:

  • for website in json_dict['url'][0]['loc']:
  • 您不应该将图像用于代码。您应该在问题中包含所有相关代码。
  • @Barmar 对不起,您的代码也给出了错误:for website in json_dict['url'][0]['loc']: KeyError: 'url
  • 在您在屏幕截图中显示之前,JSON 文件中是否有任何内容?您可以将 JSON 作为纯文本而不是图像发布吗?

标签: python json python-3.x beautifulsoup screen-scraping


【解决方案1】:

在你的 json 文件中,整个东西的左括号是未命名的,尝试将其命名为 data,然后用 json_dict['data']['url']['loc'][0] 调用它(对于 url 本身)

【讨论】:

  • 在您添加评论说它不起作用之前,我只是在表达式的末尾添加了一个 [0],因为我没有意识到您在 json 文件中使用了一个数组(无论出于何种原因)
  • 我很高兴我精神焕发了。 :-) 不幸的是,这也产生了错误。 $ python c:/Users/Sebastiaan/Desktop/PythonBoek/scraperPython/scraper2.0.py Traceback(最近一次调用最后):文件“c:/Users/Sebastiaan/Desktop/PythonBoek/scraperPython/scraper2.0.py”,第 8 行,在 中用于 json_dict['data']['url']['loc'][0]: KeyError: 'data' 我按照您的要求更改了我的 json 文件。 { "data": { "url": [ { "loc": [ "" ], "changefreq": [ "daily" ] },
  • 我的意思是在你的 json 中做 data = { ... not {data :
  • 如果它包含data={...},它将不是一个有效的json文件
  • ... 是占位符 lmao
猜你喜欢
  • 2017-05-23
  • 2015-02-21
  • 2010-10-14
  • 1970-01-01
  • 2015-06-02
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 2013-08-08
相关资源
最近更新 更多