can110さん曰く
せっかくBeautifulSoupを使っているのですから
自分も「BeautifulSoupでDOMの構造を走査できたと思うのだけどなぜ正規表現が出てくるのだろう?」が第一印象でした。
よくわかってないのでBeautifulSoupの使用例を覗いてみるとfind_allの引数に正規表現を渡せたりすることがわかりました。ひょっとすると「URLを含むようなエレメントを列挙するにはどんな正規表現をfind_allに書けばよいか?」といった意図だったのでしょうか?
つまり以下のような。
Python
1from bs4 import BeautifulSoup
2import re
3
4...
5soup = BeautifulSoup(...)
6
7elem_patterns = [
8 [ 'href', '^(a|link|...その他もろもろ)$' ],
9 [ 'src', '^(img|iframe|...その他もろもろ)$' ],
10 ... そのほかもろもろ?
11]
12urls = []
13for ep in elem_patterns:
14 for elem in soup.find_all(re.compile(ep[1], flags=re.IGNORECASE)):
15 url = elem.get(ep[0])
16 if url and url.startswith('http'):
17 urls.append(url)
18...
より精密に書くにはHTMLの構造==DOMの仕様の把握が必要と思います。上の例ではごく大雑把にしか書いてません。
- Anchorの属性はhrefで、Imageの属性はsrcのようにurlを保持している属性が要素の種類によって異なる
- 要素名は大文字小文字を区別しないのがHTMLの仕様だったような・・・
- urlといっても色々な表現が有り得るがhttp or https で始まるものを集めてみた
本来はhttp:
, https:
とコロンのところまでプロトコルをかっちり指定すべきと思いますがサボりました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。