はまったこと
“http://hoge.com/” というサイトから、以下のHTMLのhrefとimg srcの絶対パスを抽出したかった。
<article>
<figure><a href="/hogehoge?id=abcde"><img src="http://hoge.com/1/hoge.jpg"></figure>
</article>
しかし、a hrefは相対パスで記載されているので、普通にスクレイピングすると相対パスしか抽出できない。
img srcの方はうまく抽出できず、以下のようになってしまった。
[<img src="http://hoge.com/1/hoge.jpg">]
使ったもの
- Python3
- Beautifulsoup4.5.1
BeautifulSoupをインストール
BeautifulSoup4はpipでインストール
pip install beautifulsoup4
実行サンプル
urllib.requestモジュール、urllib.parseモジュールのurljoinメソッド、BeautifulSoupをインポートする。
import urllib.request
from urllib.parse import urljoin
from bs4 import BeautifulSoup
hrefの絶対パスを取得するときにurljoinを使うので、該当HPのurlを変数に入れておく。
url = "http://hoge.com/"
urllib.requestモジュールのurlopenメソッドでurlを開く。
BeautifulSoupを使ってスクレイピングするときに使いたいので、インスタンスを作成。
html = urllib.request.urlopen(url)
BeautifulSoupのインスタンスを作成。
soup = BeautifulSoup(html, "lxml")
HTMLからarticleタグを取得
for item in soup.find_all("article"):
hrefの絶対パスはurlとhrefの相対パスをurljoinでつなげて作成する
link = urljoin(url, item.a.get("href"))
img srcの絶対パスは以下のようにすれば取得できる。
絶対パスはimg_path。
img = item.find("img")
img_path = img["src"]
0 コメント:
コメントを投稿