在python {div}中的div内的Div的BeautifulSoup

时间:2017-03-23 02:58:02

标签: python web-scraping beautifulsoup

我查看了类似问题的不同帖子,但我无法找到我正在寻找的特定值。

我正在使用此代码:

import bs4 as bs
import urllib2

response = urllib2.urlopen('https://www.meteomedia.com/ca/meteo/quebec/montreal?wx_auto_reload=')
html = response.read()
soup = bs.BeautifulSoup(html, 'lxml')


for div in soup.find_all('div', id="main-container"):
    print (div.get_text())

我无法找到此特定行(突出显示的那一行):https://i.stack.imgur.com/OIlrc.png

我知道我可以使用API​​,但我试图了解网络抓取如何适用于未来的项目。谢谢!!

2 个答案:

答案 0 :(得分:1)

您选择的网站可能会使用javascript创建其大部分内容,因此使用简单的Python请求不会为您提供所有最终的HTML。解决方法是使用selenium之类的东西来远程控制浏览器并让浏览器呈现HTML。然后,Python可以通过selenium提取最终的HTML。

如前所述,在这种情况下,使用正在使用的API提取信息会更有意义,例如:

import bs4 as bs
import urllib2
import json

response = urllib2.urlopen('https://www.meteomedia.com/api/data/caqc0363/cm?ts=1012')
json_response = json.loads(response.read())
print json_response['obs']['t']

这会将当前温度显示为:

-10

如果您print json_response,您将能够看到可以使用的所有可用信息。

答案 1 :(得分:0)

打开Chrome development Tools,切换到NetWork tab,刷新页面:

enter image description here

您可以在XHR标签中找到数据链接,然后使用Python向其发出请求。