2016年8月29日月曜日

BeautifulSoupではまったこと

はまったこと


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 コメント:

コメントを投稿