BeautifulSoup HTML 表格解析
Posted
技术标签:
【中文标题】BeautifulSoup HTML 表格解析【英文标题】:BeautifulSoup HTML table parsing 【发布时间】:2011-01-04 18:49:41 【问题描述】:我正在尝试解析来自该站点的信息(html 表格):http://www.511virginia.org/RoadConditions.aspx?j=All&r=1
目前我正在使用 BeautifulSoup,我的代码如下所示
from mechanize import Browser
from BeautifulSoup import BeautifulSoup
mech = Browser()
url = "http://www.511virginia.org/RoadConditions.aspx?j=All&r=1"
page = mech.open(url)
html = page.read()
soup = BeautifulSoup(html)
table = soup.find("table")
rows = table.findAll('tr')[3]
cols = rows.findAll('td')
roadtype = cols[0].string
start = cols.[1].string
end = cols[2].string
condition = cols[3].string
reason = cols[4].string
update = cols[5].string
entry = (roadtype, start, end, condition, reason, update)
print entry
问题在于开始列和结束列。他们只是被打印为“无”
输出:
(u'Rt. 613N (Giles County)', None, None, u'Moderate', u'snow or ice', u'01/13/2010 10:50 AM')
我知道它们被存储在列列表中,但似乎额外的链接标签会混淆原始 html 的解析,如下所示:
<td headers="road-type" class="ConditionsCellText">Rt. 613N (Giles County)</td>
<td headers="start" class="ConditionsCellText"><a href="conditions.aspx?lat=37.43036753&long=-80.51118005#viewmap">Big Stony Ck Rd; Rt. 635E/W (Giles County)</a></td>
<td headers="end" class="ConditionsCellText"><a href="conditions.aspx?lat=37.43036753&long=-80.51118005#viewmap">Cabin Ln; Rocky Mount Rd; Rt. 721E/W (Giles County)</a></td>
<td headers="condition" class="ConditionsCellText">Moderate</td>
<td headers="reason" class="ConditionsCellText">snow or ice</td>
<td headers="update" class="ConditionsCellText">01/13/2010 10:50 AM</td>
所以应该打印的是:
(u'Rt. 613N (Giles County)', u'Big Stony Ck Rd; Rt. 635E/W (Giles County)', u'Cabin Ln; Rocky Mount Rd; Rt. 721E/W (Giles County)', u'Moderate', u'snow or ice', u'01/13/2010 10:50 AM')
感谢您的任何建议或帮助,并提前感谢您。
【问题讨论】:
您不必为此使用 Beautiful Soup。你可以使用 python3 htmlparser:github.com/schmijos/html-table-parser-python3/blob/master/… 【参考方案1】:start = cols[1].find('a').string
或更简单
start = cols[1].a.string
或更好
start = str(cols[1].find(text=True))
和
entry = [str(x) for x in cols.findAll(text=True)]
【讨论】:
我使用了 str(cols...) 方法。谢谢。 欢迎 ) 如果您觉得有帮助,最好接受一个答案 我同意,@Stephon Tanner 请返回并接受这个答案【参考方案2】:我试图重现您的错误,但源 html 页面已更改。
关于错误,我也遇到过类似的问题,尝试复现的例子是here
更改a Wikipedia Table 的建议网址
我已将其移至 BeautifulSoup4
from bs4 import BeautifulSoup
并将.string
更改为.get_text()
start = cols[1].get_text()
我无法使用您的示例进行测试(正如我之前所说,我无法重现该错误),但我认为这对于正在寻找此问题的解决方案的人们可能很有用。
【讨论】:
以上是关于BeautifulSoup HTML 表格解析的主要内容,如果未能解决你的问题,请参考以下文章
BeautifulSoup 无法解析内容,因为页面加载速度太慢
7-13爬虫入门之BeautifulSoup对网页爬取内容的解析
如何使用Python中的BeautifulSoup从HTML链接解析嵌套表?