2024-09-30 20:28:21 发布
网友
这是我要解析的html。在
<TD>Serial Number</TD><TD>AB12345678</TD>
我试图使用正则表达式来解析数据。我听说过beauthulsoup,但是页面上有大约50个类似的项目都使用相同的表参数,而且没有一个有ID号。它们与唯一标识符最接近的是我需要的数据之前的单元格中的数据。在
Source只是使用urllib抓取的页面的源代码。在html中第二个和序列号之间有一个新行,但我不确定这是否重要。在
Pyparsing可以为您的数据提供一个更健壮的提取器:
from pyparsing import makeHTMLTags, Word, alphanums htmlfrag = """<blah></blah><TD>Serial Number</TD><TD> AB12345678 </TD><stuff></stuff>""" td,tdEnd = makeHTMLTags("td") sernoFormat = (td + "Serial Number" + tdEnd + td + Word(alphanums)('serialNumber') + tdEnd) for sernoData in sernoFormat.searchString(htmlfrag): print sernoData.serialNumber
印刷品:
请注意,pyparsing不关心额外的空白落在哪里,它还处理可能在定义的标记、标记内的空白、大写/小写的标记中突然出现的意外属性
在大多数情况下,最好使用适当的解析器处理html,但在某些情况下,使用正则表达式来完成任务是完全可以的。我对您的任务知之甚少,无法判断它是否是一个好的解决方案,或者使用@Paul的解决方案是否更好,但是这里我尝试修复您的regex:
serialNumber = re.search("Serial Number</td><td>(.*?)</td>", source, re.S | re.I )
我删除了\n,因为在我看来这很难(\n\r\r\n,…?),而是使用了选项re.S(Dotall)。在
\n
re.S
但请注意,现在如果有一个新行,它将在您的捕获组中!i、 你应该在结果中去掉空白。在
regex的另一个问题是字符串中的<TD>,但是您要搜索<td>。这里有选项re.I(IgnoreCase)。在
<TD>
<td>
re.I
您可以找到有关regex的更多解释here on docs.python.org
Pyparsing可以为您的数据提供一个更健壮的提取器:
印刷品:
^{pr2}$请注意,pyparsing不关心额外的空白落在哪里,它还处理可能在定义的标记、标记内的空白、大写/小写的标记中突然出现的意外属性
在大多数情况下,最好使用适当的解析器处理html,但在某些情况下,使用正则表达式来完成任务是完全可以的。我对您的任务知之甚少,无法判断它是否是一个好的解决方案,或者使用@Paul的解决方案是否更好,但是这里我尝试修复您的regex:
我删除了
\n
,因为在我看来这很难(\n\r\r\n,…?),而是使用了选项re.S
(Dotall)。在但请注意,现在如果有一个新行,它将在您的捕获组中!i、 你应该在结果中去掉空白。在
regex的另一个问题是字符串中的
<TD>
,但是您要搜索<td>
。这里有选项re.I
(IgnoreCase)。在您可以找到有关regex的更多解释here on docs.python.org
相关问题 更多 >
编程相关推荐