0

我正在研究正则表达式,想知道如何从 HTML 页面中提取 URL。我想从这一行打印出网址:

Website is: http://www.somesite.com 

每次找到该链接时,我只想在**Website is:** 任何帮助后提取其中的 URL。

4

4 回答 4

2

这足够还是您需要更具体?

In [230]: s = 'Website is: http://www.somesite.com '
In [231]: re.findall('Website is:\s+(\S+)', s)
Out[231]: ['http://www.somesite.com']
于 2013-02-18T16:39:57.847 回答
0

您可以将每一行与带有捕获组的正则表达式匹配,如下所示:

for l in page:
    m = re.match("Website is: (.*)")
    if m:
        print m.groups()[0]

这将检查每一行是否与模式匹配,并从中提取链接。

几个陷阱:

  1. 这假定“Website is”表达式始终位于行首。如果不是,您可以使用re.search.

  2. 这假设冒号和网站之间只有一个空格。如果这不是真的,您可以将表达式更改为类似Website is:\s+(http.*).

具体情况取决于您尝试解析的页面。

于 2013-02-18T16:40:09.657 回答
0

正则表达式可能对此有点矫枉过正,因为它非常简单。

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
于 2013-02-18T16:42:40.860 回答
0

根据我读过的内容,用正则表达式捕获 URL 很尴尬

可能使用以下正则表达式模式对您有好处:

pat = 'Website is: (%s)' % fireball

其中 fireball 是一种捕获 URL 的模式,您可以在此处找到:

daringfireball.net/2010/07/improved_regex_for_matching_urls

于 2013-02-18T16:50:43.993 回答