我试图在bs4中找到标签,其中文字格式为:' Firma:...........'。问题是re.compile根本不起作用。我无法知道自己在做什么。
这是html的代码:
<span class="date">
Firma:
<b>Agedr js</b>
</span>
以下是查找此标记的代码:
re.DOTALL
attributes = soup.findAll('span', class_='date')
for attribute in attributes:
if attribute == re.compile('Firma: .*'):
firma = attribute.text
print firma
我想我在文本中使用了一些特殊的字符&#39; Firma:&#39;但我找不到它。 问题出在哪里?
编辑: 方式不起作用:
我尝试re.compile('Firma.*')
。
re.DOTALL
将if attribute == ...
切换为attribute.contents[0] == ...
答案 0 :(得分:1)
代码将已编译的模式对象与Tag
对象进行比较。它总会失败。
>>> import re
>>> re.compile('a') == 'a' # PatternObject == str => always false
False
>>> re.compile('a').search('a')
<_sre.SRE_Match object at 0x0000000002933168>
>>> re.search('a', 'a')
<_sre.SRE_Match object at 0x00000000029331D0>
您应该将PatternObject.search
(或re.search
)与str
一起使用(略微修改模式不包含空格):
if re.compile('Firma:.*').search(attribute.text):
firma = attribute.text
print firma
但是对于这个简单的情况,你最好使用in
运算符:
if 'Firma:' in attribute.text:
....