Python BeautifulSoup将单引号替换为双引号
在Python的BeautifulSoup4中,如果执行以下命令:Python BeautifulSoup将单引号替换为双引号,python,beautifulsoup,Python,Beautifulsoup,在Python的BeautifulSoup4中,如果执行以下命令: soup = BeautifulSoup("<a href='http://somelink'>link</a>") print soup 给定http://www.download3000.com/page和上面的示例,my函数返回以下正则表达式:\w\w>\w\w\w\w 如果我将正则表达式应用于download3000的html代码,它将找不到任何匹配项。这是因为链接在html中被单引号包围,但当
soup = BeautifulSoup("<a href='http://somelink'>link</a>")
print soup
给定http://www.download3000.com/
page和上面的示例,my函数返回以下正则表达式:\w\w>\w\w\w\w
如果我将正则表达式应用于download3000的html代码,它将找不到任何匹配项。这是因为链接在html中被单引号包围,但当我使用BeautifulSoup时,它将单引号替换为双引号,并且生成的正则表达式仅适用于由BeaurifulSoup修改的html
这就是为什么我需要强制BeautifulSoup不要用双引号替换单引号,这样生成的正则表达式将是\w\w>\w\w\w\w
,从而从页面中提取我需要的内容
我可以使用一个转储解决方案,比如用
[“\']
替换正则表达式中的所有单引号,但是正则表达式也会捕获一些我不想要的链接。这适用于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))
>c=“”
>>>从BeautifulSoup导入BeautifulSoup
>>>进口稀土
>>>d=re.sub(“,”,c)
>>>e=美组(d)
>>>def qfix(x):返回re.sub(“\”\“\”\”、“\”,x)
>>>qfix((str(e))
您可能可以在Beautifulsoup4中使用类似于“qfix”的格式化程序
或者它可能根本不起作用:)你为什么不想这样?意思是一样的。BeautifulSoup是一个用于访问HTML文档内容的库,这些内容保存得很好。@Martijn Pieters我正在编写一个正则表达式生成器。Atm它可以生成正则表达式,但由于BeautifulSoup和生成的reg-ex在原始文档中不匹配,因此reg-ex包含双引号而不是单引号。您确实应该避免在此处使用正则表达式。而且您的正则表达式生成器不能调整为使用
[“']
来代替?@IonutHulub:为什么不做一个简单的字符串替换呢?我不能只使用一个sting替换,因为这样它也会捕获双引号,而我(总是)不会这样做想被抓住。我不想听起来粗鲁,但如果你停止质疑我的理由,只提供一个答案就好了。3.2.1对我来说不起作用,但应该补充一点,我已经在处理unicode HTML了,所以可能区别纯粹在于使用str(e)
而不是unicode(e)
。
samples = [
'/showarticles-1-0-date.html',
'/showarticles-2-0-date.html',
'/showarticles-3-0-date.html'
]
>>> 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))