Python,网络抓取天气值

时间:2018-10-23 06:13:28

标签: python web-scraping beautifulsoup

长话短说,我一直没有解决任何问题,最终经过多年的潜伏,我开始在stackoverflow上注册自己:)

我正试图从AccuWeather或任何其他站点获取天气值,但我不断收到此错误:

  

回溯(最近一次拨打电话):文件“ weather.py”,第9行,在          request = urllib2.Request(site,headers = headers)NameError:名称“ urllib2”未定义

我正在学习python,所以如果这是我在浪费您时间的基本问题,请原谅。

这是我的代码:

# import libraries
from urllib2 import urlopen, Request, HTTPError
from bs4 import BeautifulSoup

headers = {"Accept-Language": "en-US,en;q=0.5", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0"}
# specify the url
site = "https://www.accuweather.com/en/aq/mcmurdo-station/2273718/current-weather/2273718"

request = urllib2.Request(site, headers=headers)

page = urllib2.urlopen(req)
content = page.read()

# parse the html using beautiful soup and store in variable soup
soup = BeautifulSoup(page, 'html.parser')

# Take out the <div> of name and get its value
temp = soup.find('div', attrs={'class': 'h2'})
print temp

谢谢!

1 个答案:

答案 0 :(得分:3)

from urllib2 import urlopen, Request, HTTPError

这里是从urllib2库导入的,这意味着在调用导入的模块之一时不引用urllib2。所以代替:

request = urllib2.Request(site, headers=headers)

那将是:

request = Request(site, headers=headers)

要更多地钻探该房屋,因为我以前也对此感到困惑,因此您已经使用bs4 import BeautifulSoup进行了完全相同的操作。请注意,您如何不调用bs4.BeautifulSoup,而仅调用BeautifulSoup。

page = urllib2.urlopen(req)

您在此处再次执行此操作,并且您还将传递“ req”而不是刚刚创建的“ request”对象。

最后,如果您已解决此问题,则可能由于以下原因而无输出:

temp = soup.find('div', attrs={'class': 'h2'})

您要的是'h2'类的'div'。 h2本身就是HTML元素,而不是类属性,除非它是一个非常时髦的网站。

祝您的项目好运!