0

私は正規表現に取り組んでおり、HTML ページから URL を抽出する方法を考えていました。この行から URL を出力したい:

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

そのリンクが見つかるたびに、そこにある URL を抽出したいだけです**Website is:**

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. これは、「Websiteis」式が常に行の先頭にあることを前提としています。そうでない場合は、を使用できますre.search

  2. これは、コロンとWebサイトの間にちょうど1つのスペースがあることを前提としています。そうでない場合は、式を。のようなものに変更できますWebsite is:\s+(http.*)

詳細は、解析しようとしているページによって異なります。

于 2013-02-18T16:40:09.657 に答える
0

私が読んだことによると、URLは正規表現でキャプチャするのが面倒です

おそらく、次の正規表現パターンを使用するとよいでしょう。

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

ここで、fireballは、ここにあるURLをキャッチするためのパターンです。

daringfireball.net/2010/07/improved_regex_for_matching_urls

于 2013-02-18T16:50:43.993 に答える
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 に答える