python - 从html文档中提取日期

标签 python beautifulsoup

我有一个非常大的 html 文件。 我需要抓取这个 html 文件并提取某些信息

soup.findAll('table',{"summary" : "This table displays snapshot information"})

[<table border="1" summary="This table displays snapshot information" width="500">
 <tbody><tr><th class="awrnobg" scope="col"></th><th class="awrbg" scope="col">Snap Id</th><th class="awrbg" scope="col">Snap Time</th><th class="awrbg" scope="col">Sessions</th><th class="awrbg" scope="col">Cursors/Session</th></tr>
 <tr><td class="awrnc" scope="row">Begin Snap:</td><td align="right" class="awrnc">98810</td><td align="center" class="awrnc">29-Jun-15 08:00:02</td><td align="right" class="awrnc">700</td><td align="right" class="awrnc">    129.6</td></tr>
 <tr><td class="awrc" scope="row">End Snap:</td><td align="right" class="awrc">98864</td><td align="center" class="awrc">29-Jun-15 17:00:23</td><td align="right" class="awrc">703</td><td align="right" class="awrc">    129.1</td></tr>
 <tr><td class="awrnc" scope="row">Elapsed:</td><td class="awrnc"> </td><td align="center" class="awrnc">             540.35 (mins)</td><td class="awrnc"> </td><td class="awrnc"> </td></tr>
 <tr><td class="awrc" scope="row">DB Time:</td><td class="awrc"> </td><td align="center" class="awrc">           2,963.17 (mins)</td><td class="awrc"> </td><td class="awrc"> </td></tr>
 </tbody></table>]

用漂亮的汤我设法得到了一份 list 。 但我需要提取日期 29-Jun-15 08:00:02 任何想法 我可以单独操作列表项,但这对我来说很难看。

最佳答案

只需使用其 搜索td。它应该返回一个列表,您可以从那里继续。

from bs4 import BeautifulSoup as bsoup

html = """<table border="1" summary="This table displays snapshot information" width="500">
 <tbody><tr><th class="awrnobg" scope="col"></th><th class="awrbg" scope="col">Snap Id</th><th class="awrbg" scope="col">Snap Time</th><th class="awrbg" scope="col">Sessions</th><th class="awrbg" scope="col">Cursors/Session</th></tr>
 <tr><td class="awrnc" scope="row">Begin Snap:</td><td align="right" class="awrnc">98810</td><td align="center" class="awrnc">29-Jun-15 08:00:02</td><td align="right" class="awrnc">700</td><td align="right" class="awrnc">    129.6</td></tr>
 <tr><td class="awrc" scope="row">End Snap:</td><td align="right" class="awrc">98864</td><td align="center" class="awrc">29-Jun-15 17:00:23</td><td align="right" class="awrc">703</td><td align="right" class="awrc">    129.1</td></tr>
 <tr><td class="awrnc" scope="row">Elapsed:</td><td class="awrnc"> </td><td align="center" class="awrnc">             540.35 (mins)</td><td class="awrnc"> </td><td class="awrnc"> </td></tr>
 <tr><td class="awrc" scope="row">DB Time:</td><td class="awrc"> </td><td align="center" class="awrc">           2,963.17 (mins)</td><td class="awrc"> </td><td class="awrc"> </td></tr>
 </tbody></table>"""

soup = bsoup(html)
print soup.find_all('td', class_='awrnc')[2].get_text()
# 29-Jun-15 08:00:02

编辑:

考虑到您返回表列表的原始代码,只需使用正常的列表索引/切片来获取您想要的表。请参阅我的以下示例。我将上面的 HTML 更改为具有三个具有相同 summary 属性的 table。我的代码将返回所有三个,因此我将选择第一个。然后,我将查找与我定义的 class 匹配的所有 td。然后,我将使用 [2] 选择第三个。然后,我将使用 get_text() 获取目标 td 元素内的值。

from bs4 import BeautifulSoup as bsoup

html = """<html><body><table border="1" summary="This table displays snapshot information" width="500">
 <tbody><tr><th class="awrnobg" scope="col"></th><th class="awrbg" scope="col">Snap Id</th><th class="awrbg" scope="col">Snap Time</th><th class="awrbg" scope="col">Sessions</th><th class="awrbg" scope="col">Cursors/Session</th></tr>
 <tr><td class="awrnc" scope="row">Begin Snap:</td><td align="right" class="awrnc">98810</td><td align="center" class="awrnc">29-Jun-15 08:00:02</td><td align="right" class="awrnc">700</td><td align="right" class="awrnc">    129.6</td></tr>
 <tr><td class="awrc" scope="row">End Snap:</td><td align="right" class="awrc">98864</td><td align="center" class="awrc">29-Jun-15 17:00:23</td><td align="right" class="awrc">703</td><td align="right" class="awrc">    129.1</td></tr>
 <tr><td class="awrnc" scope="row">Elapsed:</td><td class="awrnc"> </td><td align="center" class="awrnc">             540.35 (mins)</td><td class="awrnc"> </td><td class="awrnc"> </td></tr>
 <tr><td class="awrc" scope="row">DB Time:</td><td class="awrc"> </td><td align="center" class="awrc">           2,963.17 (mins)</td><td class="awrc"> </td><td class="awrc"> </td></tr>
 </tbody></table><table summary="This table displays snapshot information"></table><table summary="This table displays snapshot information"></table><body><html>"""

soup = bsoup(html)

list_of_tables = soup.find_all("table", {"summary":"This table displays snapshot information"}) # This will return 3 tables based on the above HTML.
target_table = list_of_tables[0] # Target the first one.

list_of_tds = target_table.find_all('td', class_='awrnc')
target_td = list_of_tds[2]
target_value = target_td.get_text()
print target_value
# 29-Jun-15 08:00:02

TL;DR:只需在列表中使用 [0]。似乎这是您无论如何都能找到的唯一一张 table 。之后,您可以再次在其中搜索,因为它变成了有效的 BeautifulSoup HTML 字符串。

关于python - 从html文档中提取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31284222/

相关文章:

Python Pandas : difference of column values insert into new column

python - bs4.FeatureNotFound : . .. lxml 与 MacOS 和 Conda/Python 3

python - 如何使用 BeautilSoup 提取表信息?

python - 从带有列表的网站获取名称并不总是有效

python - 使用 beautifulSoup4 解析 html 表时出现属性错误

python - 如何从 Python 连接到 Netezza 数据库?

python - 从文本中提取关系

python - 在带有 Matplotlib 的 Python 中,如何检查图中的子图是否为空

python - 根据条件在python中具有不同值范围的三个列表中选择最佳索引

python - 找不到满足lxml新闻-请要求的版本