我正在使用python和BS4从网站上获取一系列链接,但我需要清理它们,所以我只获取字符串中的URL。
链接我看起来像这样:
javascript:changeChannel('http://some-server.com/with1234init.also',20);
我需要它看起来像这样
答案 0 :(得分:1)
好吧,如果所有链接都是那样的,你可以用一种非常简单的方法来实现:
s.split("'")[1]
例如:
>>>s="javascript:changeChannel('http://some-server.com/with1234init.also', 20);"
>>>s.split("'")
['javascript:changeChannel(',
'http://some-server.com/with1234init.also',
', 20);']
答案 1 :(得分:0)
str = javascript:changeChannel('http://some-server.com/with1234init.also', 20);
formattedtext ="http://" + str.split("http://")[1].split(',')[0].strip("'")
答案 2 :(得分:0)
一种相当健壮的方法是获取大量文本并使用URL匹配的正则表达式模式进行搜索。
另见:
Python regular expression again - match url
链接到这里:http://daringfireball.net/2010/07/improved_regex_for_matching_urls
Extracting URL link using regular expression re - string matching - Python
使用正则表达式...
import re
re.search(pattern, text)
... or
re.findall(pattern, text)
一个完整的例子......
>>> p = re.compile(r'(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))')
or
>>> p = re.compile('(?i)\\b((?:https?://|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:\\\'".,<>?\xc2\xab\xc2\xbb\xe2\x80\x9c\xe2\x80\x9d\xe2\x80\x98\xe2\x80\x99]))')
>>> m = p.search("javascript:changeChannel('http://some-server.com/with1234init.also', 20);")
>>> m.group()
'http://some-server.com/with1234init.also'
使用的模式来自above link
中的网址请注意在第一种模式中使用r
前缀和转义'
引号。
使用re.compile缓存正则表达式