我是Python和美丽汤的新手!我听说过BS。它被告知是一个解析和提取内容的好工具。所以我在这......:
我想在html中获取表格第一个td的内容 文献。例如,我有这个表
<table class="bp_ergebnis_tab_info">
<tr>
<td>
This is a sample text
</td>
<td>
This is the second sample text
</td>
</tr>
</table>
我如何使用beautifulsoup来获取文本“这是一个示例文本”? 我使用soup.findAll('table',attrs = {'class':'bp_ergebnis_tab_info'})来获取 整个表格。
谢谢...或者我应该尝试使用Perl获取所有内容...我不太熟悉。另一个解决方案是PHP中的正则表达式。
查看目标[1]:http://www.schulministerium.nrw.de/BP/SchuleSuchen?action=799.601437941842&SchulAdresseMapDO=142323
请注意;因为html有点无效 - 我认为我们必须做一些清理工作。这可能导致很多PHP代码 - 因为我们想用PHP解决这个问题。 Perl也是一个很好的解决方案。
非常感谢您提出一些起点和想法 零
答案 0 :(得分:12)
首先找到桌子(正如你所做)。使用find
而不是findall
会返回列表中的第一项(而不是返回所有查找的列表 - 在这种情况下,我们必须添加额外的[0]
才能获取第一项列表中的元素):
table = soup.find('table' ,attrs={'class':'bp_ergebnis_tab_info'})
然后再次使用find
查找第一个td
:
first_td = table.find('td')
然后使用renderContents()
提取文字内容:
text = first_td.renderContents()
...并完成了工作(尽管您可能还想使用strip()
删除前导和尾随空格:
trimmed_text = text.strip()
这应该给出:
>>> print trimmed_text
This is a sample text
>>>
根据需要。
答案 1 :(得分:0)
使用“文本”获取“ td”之间的文本
1)首先使用标签或ID读取表DOM
soup = BeautifulSoup(self.driver.page_source, "html.parser")
htnm_migration_table = soup.find("table", {'id':'htnm_migration_table'})
2)阅读正文
tbody = htnm_migration_table.find('tbody')
3)从tbody标签读取所有tr
trs = tbody.find_all('tr')
4)使用tr获得所有tds
for tr in trs:
tds = tr.find_all('td')
for td in tds:
print(td.text)
答案 2 :(得分:-1)
我发现Beautiful Soup非常有效的工具,所以继续学习它:-)它能够解析一个带有无效标记的页面,因此它应该能够处理你引用的页面。如果要获得具有有效标记的有效重新格式化页面源,可能需要使用命令BeautifulSoup(html).prettify()
命令。
至于你的问题,你的第一个soup.findAll(...)
命令的结果也是一个美丽的汤对象,你可以在其中进行第二次搜索,如下所示:
table_soup = soup.findAll('table' ,attrs={'class':'bp_ergebnis_tab_info'})
your_sample_text = table_soup.find("td").renderContents().strip()
print your_sample_text