Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何修复';键错误';美丽的欧罗_Python_Web Scraping_Beautifulsoup - Fatal编程技术网

Python 如何修复';键错误';美丽的欧罗

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 #

我正在学习如何使用BeautifulSoup,并试图从谷歌上了解天气

我使用的url是:

我收到一个“KeyError:”id“错误

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被复制,事情就会变得一团糟。。。