如果我执行以下命令,请在BeautifulSoup4 for Python中使用:
soup = BeautifulSoup("<a href='http://somelink'>link</a>")
print soup
输出结果为:
<a href="http://somelink">link</a>
BeaurifulSoup用双引号替换单引号,我不希望这样。如何取消/覆盖该行为?
澄清:
我使用urllib2获取以下页面的html:http://www.download3000.com/
然后使用BeautifulSoup4仅提取部分html。
我创建了一个函数,它接受一个文档(不总是html)和一些需要捕获的样本并返回一个正则表达式。 我用下面的样本提供函数:
samples = [
'/showarticles-1-0-date.html',
'/showarticles-2-0-date.html',
'/showarticles-3-0-date.html'
]
鉴于http://www.download3000.com/
页面的html代码和上面的示例,我的函数返回以下正则表达式:\w\w><li><a href="(.*?)">\w\w\w\w\w
如果我将正则表达式应用于download3000的html代码,它将找不到任何匹配项。这是因为链接被html中的单引号包围,但是当我使用BeautifulSoup时,它用双引号替换单引号,并且生成的正则表达式仅适用于BeaurifulSoup修改的html。
这就是为什么我需要强制BeautifulSoup不要用双引号替换单引号,这样生成的正则表达式将为\w\w><li><a href='(.*?)'>\w\w\w\w\w
,从而从页面中提取我需要的内容。
我可以使用转储解决方案,例如用["\']
替换我的正则表达式中的所有单引号,但是正则表达式也会捕获一些我不想要的链接。
答案 0 :(得分:0)
这适用于BeautifulSoup 3.2。我假设发生的事情就是单引号被转换为"
然后解析器将它们包围起来“
然后在输出时出现模式"'
或'"
>>> c="<a href='http://somelink'>"
>>> from BeautifulSoup import BeautifulSoup
>>> import re
>>> d=re.sub("'",""",c)
>>> e=BeautifulSoup(d)
>>> def qfix(x): return re.sub("\'\"|\"'","'",x)
>>> qfix((str(e))
您可以使用类似于“qfix”作为BeautifulSoup 4
中的格式化程序或者根本不起作用:)