网页抓取新手。
我需要从页面获取每日观察表(页面末尾的长表(数据:
https://www.wunderground.com/history/daily/us/tx/greenville/KGVT/date/2015-01-05?cm_ven=localwx_history
表格的 html 从<table _ngcontent-c16="" class="tablesaw-sortable" id="history-observation-table">
开始
我的代码是:
url = "https://www.wunderground.com/history/daily/us/tx/greenville/KGVT/date/2015-01-05?cm_ven=localwx_history"
html = urlopen(url)
soup = BeautifulSoup(html,'lxml')
soup.findAll(class_="region-content-observation")
输出为:
[<div class="region-content-observation">
<city-history-observation _nghost-c34=""><div _ngcontent-c34="">
<div _ngcontent-c34="" class="observation-title">Daily Observations</div>
<!-- -->
No Data Recorded
<!-- -->
</div></city-history-observation>
</div>]
因此,它没有获取表并返回"未记录数据",但它确实获得了标题。
当我尝试时
soup.findAll(class_="tablesaw-sortable")
或
soup.findAll('tr')
它只返回空列表。
有谁知道哪里出了问题?
如果您在 Firefox 中打开网页,您可以使用其开发人员工具中的"网络"选项卡来查看下载的所有不同 Web 资源。 您感兴趣的数据实际上是由此JSON文件提供的 - 可以使用Python的json
库进行检索和解析。
注意:我从未抓取过使用 API 密钥的网站,因此我不确定在这种情况下的道德规范或最佳实践。作为测试,我能够毫无问题地下载 JSON 文件。但是,我怀疑地下天气不希望您使用他们的密钥太多次 - 而且看起来他们不再提供免费的天气API密钥。