2013-07-22 365 views
2

在BeautifulSoup4用于Python如果我exectue以下命令:BeautifulSoup替换单引号用双引号

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)以及它需要捕获并返回正则表达式的一些示例。 我喂的功能与follwoing样本:如果我申请了正则表达式的\w\w><li><a href="(.*?)">\w\w\w\w\w

samples = [ 
    '/showarticles-1-0-date.html', 
    '/showarticles-2-0-date.html', 
    '/showarticles-3-0-date.html' 
] 

鉴于http://www.download3000.com/页面的HTML代码和上面的样本,我的函数返回下面的正则表达式download3000的html代码,它不会找到任何匹配。这是因为链接被html中的单引号括起来,但是当我使用BeautifulSoup时,它会用双引号替换单引号,并且生成的正则表达式仅适用于由BeaurifulSoup修改的html。

这就是为什么我需要强制BeautifulSoup不要用双引号替换单引号,以便生成的正则表达式将为\w\w><li><a href='(.*?)'>\w\w\w\w\w,从而从页面中提取我需要的内容。

我可以使用像我的正则表达式替换所有单引号["\']转储解决方案,但然后正则表达式也会捕获一些我不想要的链接。

+0

为什么你不希望这样呢?* *意义是一样的。BeautifulSoup是给了一个库您访问*内容*的HTML文件,这些内容都保留得很好, –

+0

@Martijn彼得斯我正在写一个正则表达式生成器。 Atm会生成正则表达式,但是由于BeautifulSoup和reg生成的reg ex在原始文档上不匹配,因此reg ex包含双引号而不是单引号。 –

+0

你真的*应该避免在这里使用正则表达式。而你的正则表达式生成器不能被调整为使用'['']'而不是? –

回答

0

这适用于BeautifulSoup 3.2。我认为正在发生的事情是,当单引号转换为&quot;分析器,然后围绕着他们与“ 然后在输出模式"''"发生

>>> c="<a href='http://somelink'>" 
>>> from BeautifulSoup import BeautifulSoup 
>>> import re 
>>> d=re.sub("'","&quot;",c) 
>>> e=BeautifulSoup(d) 
>>> def qfix(x): return re.sub("\'\"|\"'","'",x) 
>>> qfix((str(e)) 

您可能能够使用类似于‘qfix’在BeautifulSoup格式化4

或者,它可能不会在所有的工作:)

+0

这对我来说不适用于3.2.1,但应该补充说我已经在处理unicode HTML,所以也许差别在于纯粹使用'str(e)'而不是'unicode(e)' 。 – 2rs2ts