Python, WebScraping для значений погоды - PullRequest
0 голосов
/ 23 октября 2018

Короче говоря, я погуглил без решения, и, наконец, после многих лет скрываясь в тени, я регистрируюсь в stackoverflow:)

Я пытаюсь получить значения погоды из accweather илилюбой другой сайт, но я получаю эту ошибку:

Traceback (последний вызов был последним): файл "weather.py", строка 9, в запросе = 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 голосов
/ 23 октября 2018
from urllib2 import urlopen, Request, HTTPError

Здесь вы импортируете из библиотеки urllib2, что означает, что вы не ссылаетесь на urllib2 при вызове одного из импортированных вами модулей.Таким образом, вместо:

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

Было бы просто:

request = Request(site, headers=headers)

Чтобы еще больше сверлить этот дом, потому что я тоже был смущен этим, вы уже делаете то же самоевещь с импорта из bs4 BeautifulSoup.Обратите внимание, что вы не вызываете bs4.BeautifulSoup, а просто BeautifulSoup.

page = urllib2.urlopen(req)

Вы делаете это снова здесь, и вы также передаете 'req' вместо объекта 'request', который вы только что сделали.

И, наконец, если вы исправили этовы, вероятно, не получаете вывод из-за этой строки:

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

Вы запрашиваете div с классом 'h2'.h2 сам по себе является HTML-элементом, а не атрибутом класса, если только это не очень прикольный веб-сайт.

Удачи в вашем проекте!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...