私はBeautifulSoupを使用してHTMLページを解析しています。私は特定の正規表現のパターンと一致するページからすべてのURLと文章を抽出する必要があります。例えば。BeautifulSoupの特定のパターンに一致するページからすべてのURLを抽出します。
http.*?example\.php
どうすればいいですか?
私はBeautifulSoupを使用してHTMLページを解析しています。私は特定の正規表現のパターンと一致するページからすべてのURLと文章を抽出する必要があります。例えば。BeautifulSoupの特定のパターンに一致するページからすべてのURLを抽出します。
http.*?example\.php
どうすればいいですか?
ここで、のURLは、タグまたは文章では、生のHTMLに対してre.findall()
を実行するだけで済みます。もちろん、ちょっとした小さな正規表現よりもうまくやらなければならないでしょう。見よ:
(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*
(http://regexlib.com/Search.aspx?k=URL、正規表現のレシピのために常に良いリソースから)。いくつかのコードのために今
:
matches = re.findall(r"(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*", html)
更新:ドッシリ正規表現。
更新:あなたは試合を反復処理したい場合は、re.finditer
を使用することができます。
for match in re.finditer(r"(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*", html):
print match.group()
この正規表現は私のためには機能しませんでした。あなたは私にどのように試合を反復することができ、完全なURL文字列を取得するの完全なスニペットを教えてください。私は個々のグループは必要ありません。 –
はプレーンテキストで混合 '' 要素または単に内のURLはありますか?そして、あなたの正規表現はURL http:// example.net/example.php.foo/example.phpの一部にしか一致しないと思われます。 –
URLはタグとプレーンテキストの両方で発生する可能性があります。 –