Pythonでフラグメント(ハッシュ)か画像の拡張子があるURLを除外したい
Pythonを勉強したくクローラーを制作しているのですが、下記のコードを賢く短くしたいです。
HTMLのbody以下のタグを調べながらwebサイトのURLだけをリストに追加していくプログラムです。
def _extract_url_links(html):
"""extract url links
>>> _extract_url_links('aa<a href="link1">link1</a>bb<a href="link2">link2</a>cc')
['link1', 'link2']
"""
#"html.parser"はなるべくpython標準のparserモジュールを使うように指定しているBeautifulSoup()で
#BeautifulSoupで扱えるようにしている。
all_url = []
body_soup = BeautifulSoup(html, "html.parser").find('body')
#aタグを全て持ってくる。
for child_tag in body_soup.findChildren():
if child_tag.get('href') is not None:
if '#' not in child_tag.get('href'):#or '.png' or '.jpg' or '.gif'
if '.jpg' not in child_tag.get('href'):
if '.png' not in child_tag.get('href'):
if '.gif' not in child_tag.get('href'):
all_url.append(child_tag.get('href'))
return all_url
これで少しは短くなると思うのですがスッキリしないので他にいい方法はないでしょうか?
よろしくお願いします。
def _extract_url_links(html):
all_url = []
body_soup = BeautifulSoup(html, "html.parser").find('body')
for child_tag in body_soup.findChildren():
if child_tag.get('href') is not None:
if '#' not in child_tag.get('href') or '.jpg' not in child_tag.get('href') or '.png' not in child_tag.get('href') or'.gif' not in child_tag.get('href'):
return all_url
詳しい方回答お願いします。
Pythonの正規表現を使う事はわかりました。ただ引数をどのように設定したらいいのかわかりません。#,.png,.jpg,.gifのようにしたいのですがどのように書けば良いのでしょうか?
import re
m = re.search(r'ここの引数をどうしたらいいのかわかりません',child_tag.get('href'))
if m is not None;
all_url.append(child_tag.get('href'))