我正在尝试使用BeautifulSoup从HTML文件中获取信息。通过soup.table.table.tbody.find_all('table', attrs={'cellspacing' : '0'})
缩小'汤'后,这是我必须使用的那种html(我删除了一些html以节省空间):
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr><td>SOME CITY</td></tr>
</tbody>
</table>, <table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr><td>SOME ADDRESS</td></tr>
<tr><td>SOME ADDRESS 2</td></tr>
<tr><td>SOME CITY, STATE, ZIPCODE</td></tr>
<tr><td><a class="icon_arrow" href="http://SOMEURL" onclick="window.open('http://SOMEWEBSITE'); return false;" target="_blank">Visit website</a></td></tr>
</tbody>
</table>, <table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr><td>SOME NAME </td></tr>
</tbody>
</table>, <table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr><td nowrap="nowrap">SOME TELEPHONE</td></tr>
<tr><td><a class="icon_arrow" href="/mcs/iframecontactUsFormAction.do?toEmail=SOME@EMAIL.COM" onclick="window.open(%=contactUs%); return false;" target="_blank">E-mail Me</a></td></tr>
</tbody>
</table>, <table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr><td>SOME CTIY</td></tr>
</tbody>
</table>, <table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr><td>SOME ADDRESS</td></tr>
<tr><td>SOME ADDRESS2</td></tr>
<tr><td>SOME CITY, STATE, ZIPCODE</td></tr>
</tbody>
</table>, <table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr><td>SOME NAME </td></tr>
</tbody>
</table>, <table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr><td nowrap="nowrap">SOME TELEPHONE</td></tr>
<tr><td><a class="icon_arrow" href="/mcs/iframecontactUsFormAction.do?toEmail=SOME@EMAIL.COM" onclick="window.open(%=contactUs%); return false;" target="_blank">E-mail Me</a></td></tr>
</tbody>
</table>
</table>
这些页面的格式类似,有些记录的记录更多或更少。我有兴趣提取的信息是SOME CITY,SOME ADDRESS,SOME ADDRESS2,SOME CITY,STATE,ZIPCODE,NAME,SOME TELEPHONE和SOME@EMAIL.COM(虽然这可以跳过)。
查看html,似乎所有相关信息都在标签之间。我很难让BS找到那些标签来提取信息。
答案 0 :(得分:1)
在html文档中找到确切的部分可以通过一些特定的标记名称和属性来完成,如果这是不可能的,就像你共享的html,并且文档结构是可预测的,请考虑使用标记 position < / strong>,意思是.fine_all('tag name')[nth location]
例如:
>>> soup.find_all('table')[1].tbody.find_all('td')[2]
<td>SOME CITY, STATE, ZIPCODE</td>
答案 1 :(得分:1)
您可以使用以下代码:
tables = soup.table.table.tbody.find_all('table', attrs={'cellspacing' : '0'})
for ta in tables:
tds = ta.find_all('td')
for td in tds:
text = td.get_text()
if "E-mail Me" not in text and "Visit website" not in text:
print text
答案 2 :(得分:0)
您可以通过将各个代码添加到现有代码的末尾来搜索它们吗?我也会将它保存到某个变量(它将作为列表返回,我很确定)。像
这样的东西 info =soup.table.table.tbody.find_all('table', attrs={'cellspacing' : '0'}).find_all('td')
然后提取,只需使用get_text迭代列表:
for item in info:
item.get_text()