我正在研究正则表达式,想知道如何从 HTML 页面中提取 URL。我想从这一行打印出网址:
Website is: http://www.somesite.com
每次找到该链接时,我只想在**Website is:**
任何帮助后提取其中的 URL。
我正在研究正则表达式,想知道如何从 HTML 页面中提取 URL。我想从这一行打印出网址:
Website is: http://www.somesite.com
每次找到该链接时,我只想在**Website is:**
任何帮助后提取其中的 URL。
这足够还是您需要更具体?
In [230]: s = 'Website is: http://www.somesite.com '
In [231]: re.findall('Website is:\s+(\S+)', s)
Out[231]: ['http://www.somesite.com']
您可以将每一行与带有捕获组的正则表达式匹配,如下所示:
for l in page:
m = re.match("Website is: (.*)")
if m:
print m.groups()[0]
这将检查每一行是否与模式匹配,并从中提取链接。
几个陷阱:
这假定“Website is”表达式始终位于行首。如果不是,您可以使用re.search
.
这假设冒号和网站之间只有一个空格。如果这不是真的,您可以将表达式更改为类似Website is:\s+(http.*)
.
具体情况取决于您尝试解析的页面。
正则表达式可能对此有点矫枉过正,因为它非常简单。
def main():
urls = []
file = prepare_file("<yourfile>.html")
for i in file:
if "www" in i or "http://" in i:
urls.append(i)
return urls
def prepare_file(filename):
file = open(filename)
a = file.readlines() #splits on new lines
a = [ i.strip() for i in [ x for x in a ] ] #remove white space
a = filter(lambda x : x != '', a) #remove empty elements
return a
根据我读过的内容,用正则表达式捕获 URL 很尴尬
可能使用以下正则表达式模式对您有好处:
pat = 'Website is: (%s)' % fireball
其中 fireball 是一种捕获 URL 的模式,您可以在此处找到: