正则表达式以匹配html

时间:2018-09-26 01:31:41

标签: python html regex

我正在尝试从python代码解析HTML电子邮件以提取各种细节,并且希望使用一两个正则表达式来帮助实现此目的,因为对于我对正则表达式的理解有限,它太复杂了。例如寻找“旅行日期”并提取“ 2018年10月30日(星期二)”。

在所有情况下,<td>标记中都包含一个字段名,然后在另一组<td>标记中包含该字段值。有时,名称和值包含在同一行<tr>标签中(情况1),而有时它们位于单独的行标签中(情况2)。 <span><img>之类的其他项目也需要跳过。

案例1 <tr> <td colspan="2">&nbsp;</td></tr> <tr><td style="vertical-align: top; font-size: 13px; font-family: Arial; color: #777777;">Travel Date</td> <td style="vertical-align: top; font-size: 13px; font-family: Arial; color: #444444;">October 30 2018 (Tue)</td> </tr>

案例2 <tr><td style="vertical-align: top;"> <span style="font-size: 10px; font-family: Arial; color: #999999; font-weight: bold; line-height: 19px; text-transform: uppercase;">Drop-off to Address</span> </td></tr> <tr><td style="vertical-align: top;"> <span style="font-size: 13px; font-family: Arial; color: #444444;"><img style="vertical-align:text-bottom;" src="https://d1lk4k9zl9klra.cloudfront.net/Email/Common/address_icon.png" alt="" width="14" height="14" /> 200 George St, Sydney NSW 2000, Australia</span> </td></tr>

1 个答案:

答案 0 :(得分:1)

我将使用Beautiful Soup而不是使用正则表达式。它使遍历HTML元素和抓取所需内容变得更加容易。如果您知道键和值之间的关系,则可以使用它来提取信息。这是情况1的示例:

In [8]: from bs4 import BeautifulSoup

In [9]: text = """
   ...: <tr>
   ...: <td colspan="2">&nbsp;</td></tr>
   ...: <tr><td style="vertical-align: top; font-size: 13px; font-family: Arial; color: 
#777777;">Travel Date</td>
   ...: <td style="vertical-align: top; font-size: 13px; font-family: Arial; color: 
#444444;">October 30 2018 (Tue)</td>
   ...: </tr>"""
In [11]: soup = BeautifulSoup(text, 'lxml')
In [13]: soup.find_all('td')
Out[13]:
[<td colspan="2"> </td>,
 <td style="vertical-align: top; font-size: 13px; font-family: Arial; color: 
#777777;">Travel Date</td>,
 <td style="vertical-align: top; font-size: 13px; font-family: Arial; color: 
#444444;">October 30 2018 (Tue)</td>]
In [15]: for tag in soup.find_all('td'):
    ...:     if tag.text == "Travel Date":
    ...:         print tag.find_next().text
    ...:
October 30 2018 (Tue)

从网络上抓取HTML时,Beautiful Soup提供了很大的灵活性。