美丽的汤[Python]和表中的文本提取

zer*_*ero 5 php python

我是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>
Run Code Online (Sandbox Code Playgroud)

我如何使用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也是一个很好的解决方案.

非常感谢一些起点零点的提示和想法

psm*_*ars 13

首先找到桌子(正如你所做的那样).使用find而不是findall返回列表中的第一个项目(而不是返回所有查找的列表 - 在这种情况下,我们必须添加额外的内容[0]以获取列表的第一个元素):

table = soup.find('table' ,attrs={'class':'bp_ergebnis_tab_info'})
Run Code Online (Sandbox Code Playgroud)

然后find再次使用找到第一个td:

first_td = table.find('td')
Run Code Online (Sandbox Code Playgroud)

然后renderContents()用来提取文本内容:

text = first_td.renderContents()
Run Code Online (Sandbox Code Playgroud)

...并完成工作(尽管您可能还想使用strip()删除前导和尾随空格:

trimmed_text = text.strip()
Run Code Online (Sandbox Code Playgroud)

这应该给:

>>> print trimmed_text
This is a sample text
>>>
Run Code Online (Sandbox Code Playgroud)

如预期的.


小智 8

使用“text”获取“td”之间的文本

1)首先使用标签或ID读取表格DOM

soup = BeautifulSoup(self.driver.page_source, "html.parser")
htnm_migration_table = soup.find("table", {'id':'htnm_migration_table'})
Run Code Online (Sandbox Code Playgroud)

2) 读取 tbody

tbody = htnm_migration_table.find('tbody')
Run Code Online (Sandbox Code Playgroud)

3) 从 tbody 标签中读取所有 tr

trs = tbody.find_all('tr')
Run Code Online (Sandbox Code Playgroud)

4) 使用 tr 获取所有 tds

for tr in trs:
      tds = tr.find_all('td')
      for td in tds:
      print(td.text)
Run Code Online (Sandbox Code Playgroud)