Python 如何修复';键错误';美丽的欧罗
我正在学习如何使用BeautifulSoup,并试图从谷歌上了解天气 我使用的url是: 我收到一个“KeyError:”id“错误Python 如何修复';键错误';美丽的欧罗,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我正在学习如何使用BeautifulSoup,并试图从谷歌上了解天气 我使用的url是: 我收到一个“KeyError:”id“错误 if span.attrs["id"] == "wob_tm": 这意味着什么?我如何解决这个问题 我在指定另一个属性“class”时遇到了相同的错误,所以我认为这可能只是术语“class”的问题,但无论我使用什么,我仍然会收到错误 # Creates a list containing all appearences of the 'span' tag #
if span.attrs["id"] == "wob_tm":
这意味着什么?我如何解决这个问题
我在指定另一个属性“class”时遇到了相同的错误,所以我认为这可能只是术语“class”的问题,但无论我使用什么,我仍然会收到错误
# Creates a list containing all appearences of the 'span' tag
# The weather value is located within a span tag
spans = soup.find_all("span")
for span in spans:
if span.attrs["id"] == "wob_tm":
print(span.content)
我希望输出是天气的整数值,但当我运行代码时,我只得到:
“KeyError:'id'”字典“attrs”中没有'id'键的问题。下面的代码将处理此情况
spans = soup.find_all("span")
for span in spans:
if span.attrs.get("id") == "wob_tm":
print(span.content)
else:
print('not wob_tm')
字典“attrs”中没有“id”键的问题。下面的代码将处理此情况
spans = soup.find_all("span")
for span in spans:
if span.attrs.get("id") == "wob_tm":
print(span.content)
else:
print('not wob_tm')
一些
span
标记根本没有该属性,因此当您尝试访问该属性时,它们会给出错误。您可以优化搜索:
spans = soup.find_all('span', {'id': 'wob_tm'})
这将只找到匹配的对象。然后,您可以将它们全部打印出来:
for span in spans:
print(span.content)
一些
span
标记根本没有该属性,因此当您尝试访问该属性时,它们会给出错误。您可以优化搜索:
spans = soup.find_all('span', {'id': 'wob_tm'})
这将只找到匹配的对象。然后,您可以将它们全部打印出来:
for span in spans:
print(span.content)
尽管其余的答案都是合法的,但在这种情况下没有一个答案是有效的,因为温度的内容可能是使用
javascript
加载的,因此不会找到您正在查找的范围。相反,您可以使用肯定有效的selenium
。i、 e:
from selenium import webdriver
driver = webdriver.Chrome('chromedriver.exe')
driver.get("https://www.google.co.uk/search?sxsrf=ACYBGNSfZJRq-EqvQ7rSC0oFZW-FiL-S-Q%3A1571602469929&source=hp&ei=JcCsXb-ANoK4kwWgtK_4DQ&q=what%27s+the+weather+today&oq=whats+the+weather+&gs_l=psy-ab.3.0.0i10i70i256j0i10j0j0i10l3j0l3j0i10.663.2962..4144...0.0..0.82.1251.19......0....1..gws-wiz.....10..35i362i39j35i39j0i131.AWESAgn5njA")
temp = driver.find_element_by_id('wob_tm').text
print(temp)
尽管其余的答案都是合法的,但在这种情况下没有一个答案是有效的,因为温度的内容可能是使用javascript
加载的,因此不会找到您正在查找的范围。相反,您可以使用肯定有效的selenium
。i、 e:
from selenium import webdriver
driver = webdriver.Chrome('chromedriver.exe')
driver.get("https://www.google.co.uk/search?sxsrf=ACYBGNSfZJRq-EqvQ7rSC0oFZW-FiL-S-Q%3A1571602469929&source=hp&ei=JcCsXb-ANoK4kwWgtK_4DQ&q=what%27s+the+weather+today&oq=whats+the+weather+&gs_l=psy-ab.3.0.0i10i70i256j0i10j0j0i10l3j0l3j0i10.663.2962..4144...0.0..0.82.1251.19......0....1..gws-wiz.....10..35i362i39j35i39j0i131.AWESAgn5njA")
temp = driver.find_element_by_id('wob_tm').text
print(temp)
或者使用css选择器:span=soup。选择一个('span#wob_tm')
。。。它假定id是唯一的,但如果id被复制,事情就会变得一团糟……或者使用css选择器:span=soup。选择一个('span#wob_tm')
。。。它假设id是唯一的,但是如果id被复制,事情就会变得一团糟。。。