从字符串中获取唯一的URL - Python

时间:2014-11-21 18:11:14

标签: python python-3.x beautifulsoup

我正在使用PythonBeautifulSoup库抓取一个页面。

我必须从此字符串中获取URL。这实际上位于href标记的a属性中。我已经抓了它但似乎找不到从这个

中提取URL的方法
javascript:void%20window.open('/Sheraton-Tucson-Hotel-177/tnc/150/24795/en','TC_POPUP','width=490,height=405,screenX=300,screenY=250,top=250,left=300,scrollbars=yes,resizable=no');

4 个答案:

答案 0 :(得分:2)

您可以编写一个简单的正则表达式来提取URL。

>>> import re
>>> href = "javascript:void%20window.open('/Sheraton-Tucson-Hotel-177/tnc/150/24795/en','TC_POPUP','width=490,height=405,screenX=300,screenY=250,top=250,left=300,scrollbars=yes,resizable=no');"
>>> re.findall(r"'(.*?)'", href)
['/Sheraton-Tucson-Hotel-177/tnc/150/24795/en', 'TC_POPUP', 'width=490,height=405,screenX=300,screenY=250,top=250,left=300,scrollbars=yes,resizable=no']
>>> _[0]
'/Sheraton-Tucson-Hotel-177/tnc/150/24795/en'

这里的正则表达式是

'(.*?)'

哪个读取"找到单引号,然后是任何(并捕获任何内容),然后是另一个单引号,并且由于?运算符"而非贪婪地执行此操作。这提取了window.open的论点;然后,只需选择第一个获取URL。

您的href中不应该嵌套',因为这些应该转义为%27。但是,如果这样做,这将无效,您可能需要一个不使用正则表达式的解决方案。

答案 1 :(得分:1)

我这样做了。

terms = javascript:void%20window.open('/Sheraton-Tucson-Hotel-177/tnc/150/24795/en','TC_POPUP','width=490,height=405,screenX=300,screenY=250,top=250,left=300,scrollbars=yes,resizable=no');

terms.split("('")[1].split("','")[0]

输出

/Sheraton-Tucson-Hotel-177/tnc/150/24795/en

答案 2 :(得分:0)

而不是正则表达式,你可以只对它进行两次分区,(例如:'):

s.partition("'")[2].partition("'")[0]
# /Sheraton-Tucson-Hotel-177/tnc/150/24795/en

答案 3 :(得分:-1)

这是一个快速而丑陋的答案

href.split("'")[1]