gpt4 book ai didi

Python Web Scraping 表返回 None

转载 作者:行者123 更新时间:2023-11-28 16:37:46 24 4
gpt4 key购买 nike

我正在尝试从 www.intellicast.com 中抓取表格的温度元素

soup =  BeautifulSoup(urllib2.urlopen('http://www.intellicast.com/Local/History.aspx?location=USTX0057').read())
for row in soup('table',{'id':'dailyClimate'})[0].tbody('tr'):
tds=row
print tds

结果:TypeErrorL 'NoneType' 对象不可调用

查看页面源代码时我可以看到

<table id = "dailyClimate" class="Container">
<tbody>
<tr class="TitlesAvgRecord">
<td..
<td>...</td>

所以我知道有一个 tbody 和一个 tr 元素。

如果我将 .tbody('tr') 更改为 .tbody('td'),我仍然会收到错误消息,所以我假设错误出在调用 tbody 的某个地方。

最佳答案

您的浏览器插入一个<tbody>元素,但实际源中没有该元素:

<table id="dailyClimate" class="Container">
<tr class="TitlesAvgRecord">
<td style="padding-left:5px;">Date</td>
<td>Average<br />Low</td>
<td>Average<br />High</td>
<td>Record<br />Low</td>
<td>Record<br />High</td>
<td>Average<br />Precipitation</td>
<td>Average<br />Snow</td>
</tr>

<!-- etc. -->

参见 Why do browsers insert tbody element into table elements?

您可以使用 html5lib解析器代替(使用 BeautifulSoup(source, 'html5lib') ),这将插入元素。但是,您不需要搜索它,直接进入<tr>即可。行:

for row in soup.find('table', id='dailyClimate').find_all('tr'):

或使用 CSS 选择器:

for row in soup.select('table#dailyClimate tr'):

您通常只选择 tbody元素,如果可能不止一个或者有一个 theadtfooter您想要排除的元素。

关于Python Web Scraping 表返回 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23664748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com