1

我最近一直在使用美丽的汤 4,我一直在努力理解这方面的一些基础知识(出于某种原因,我对 bs3.x 非常满意)。因此,例如,让我们从做一些简单的事情开始,例如:

data=soup.find_all('h2')

这给我带来了类似的东西:

<h2><a href=\"/accurate-data/210-0023.prd?pageLevel=&amp;skuId=210-0023\">more-accurate-data</a></h2>

这很好。但是当我想对上面的字符串进行正则表达式时,使用一些类似的东西(假设上面存储在“temp”中):

t=str(re.compile(r"""<h2><a href=\\"/accurate(.*?)\\">""").search(str(temp)).group(1))

我得到:

AttributeError: 'NoneType' object has no attribute 'group'

我觉得很奇怪 - 因为,当我在 python 解释器上做时,类似:

k=r"""<h2><a href=\"/accurate-data/210-0023.prd?pageLevel=&amp;skuId=210-0023\">more-accurate-data</a></h2>"""

然后使用上面的正则表达式,一切正常。我想知道为什么 bs4 生成的“标签”类型似乎不可正则表达式。现在我觉得也许我在做一些愚蠢的事情,或者在我不知道的 bs3.x 和 bs4 之间发生了一些变化。对此的任何帮助将不胜感激。谢谢。

4

1 回答 1

2

您应该尝试查看repr字符串的:

>>> a=r"""<h2><a href=\"/accurate-data/210-0023.prd?pageLevel=&amp;skuId=210-0023\">more-accurate-data</a></h2>"""
>>> print repr(a)
'<h2><a href=\\"/accurate-data/210-0023.prd?pageLevel=&amp;skuId=210-0023\\">more-accurate-data</a></h2>'

正则表达式适用于这种表示:

>>> regex = re.compile(r"""<h2><a href=\\"/accurate(.*?)\\">""")
>>> regex.match(a)
<_sre.SRE_Match object at 0x20fbf30>

问题是美丽汤的结果是不同的,因为你没有打印它的 repr。在处理正则表达式时,最好检查所repr涉及的字符串以避免这样的事情。

于 2012-10-23T05:46:05.453 回答