BeautifulSoup でスクレイピングの練習です。窓の杜ライブラリのページからソフトウェアのバージョン番号のところを抜き出してみます。 窓の杜ライブラリでは以下のような感じでソフトウェアの紹介ページがあり、タイトルなどと一緒に最新のバージョン番号も記載されています。
HTML のソースを見ると以下のようになっていて、 <div class="list-tlt-spec"> を指定して取りに行けばよさそうです。
<div class="list-tlt-spec">
<h3>Google Chrome</h3>
<dl>
<dt class="invisible">バージョン・リリース日</dt>
<dd>v34.0.1847.131(14/04/24)</dd>
</dl>
</div>
書いたコードはこういう感じになりました。
import re
from bs4 import BeautifulSoup
import requests
baseurl = 'http://www.forest.impress.co.jp/library/software/'
app_list = ['ccleaner', 'googlechrome', 'line']
def main():
for app in app_list:
url = baseurl + app
response = requests.get(url)
html = response.text
soup = BeautifulSoup(html)
a = soup.find("div", class_="list-tlt-spec").find("dd").text
match = re.match(r'(^.+?)i', a)
if match:
ver_number = match.group(1)
else:
ver_number = a
print(app, ':', ver_number)
if __name__ == '__main__':
main()
実行結果です。
$ python madomori.py
ccleaner : v4.13.4693
googlechrome : v34.0.1847.131
line : v3.5.3.23
最初、 v34.0.1847.131(14/04/24) この全角括弧の部分が文字化けしてしまい、 encoding の指定などをいろいろ試してみたのですが解決できませんでした。 最初の括弧 ( が化けた結果が i になっていたので正規表現でその手前までを取得して出力することしています。