私は正規表現に取り組んでおり、HTML ページから URL を抽出する方法を考えていました。この行から URL を出力したい:
Website is: http://www.somesite.com
そのリンクが見つかるたびに、そこにある URL を抽出したいだけです**Website is:**
。
私は正規表現に取り組んでおり、HTML ページから URL を抽出する方法を考えていました。この行から URL を出力したい:
Website is: http://www.somesite.com
そのリンクが見つかるたびに、そこにある URL を抽出したいだけです**Website is:**
。
これで十分ですか、それとももっと具体的にする必要がありますか?
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]
これにより、各行がパターンに一致するかどうかがチェックされ、そこからリンクが抽出されます。
いくつかの落とし穴:
これは、「Websiteis」式が常に行の先頭にあることを前提としています。そうでない場合は、を使用できますre.search
。
これは、コロンとWebサイトの間にちょうど1つのスペースがあることを前提としています。そうでない場合は、式を。のようなものに変更できますWebsite is:\s+(http.*)
。
詳細は、解析しようとしているページによって異なります。
私が読んだことによると、URLは正規表現でキャプチャするのが面倒です
おそらく、次の正規表現パターンを使用するとよいでしょう。
pat = 'Website is: (%s)' % fireball
ここで、fireballは、ここにあるURLをキャッチするためのパターンです。
正規表現は非常に単純なので、これにはやり過ぎかもしれません。
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