BeautifulSoup4の使い方
htmlの構文解釈のライブラリです。
○htmlの準備
# -*- coding: utf-8 -*- import urllib.request from bs4 import BeautifulSoup url = "http://python-remrin.hatenadiary.jp/" f = urllib.request.urlopen(url) html = f.read().decode('utf-8') soup = BeautifulSoup(html, "html.parser")
○タイトルの表示
title | タグ+文字 |
title.name | タグのみ |
title.string | 文字のみ |
print(soup.title) #<title>Remrinのpython攻略日記</title> print(soup.title.name) #title print(soup.title.string) #Remrinのpython攻略日記
○ヘッダー、本文の取得
h = soup.head #ヘッダーの取得 b = soup.body.b #bodyの中の最初のbタグを取得
○Aタグの取得
soup.find_all("a") | すべてのaタグのリスト |
soup.find("a") | 1つめのみ |
soup.a | 1つめのみ |
a_list = soup.find_all("a") #print(a_list) #実際にprintすると100件くらい表示される a_list = soup.find_all("a", limit=5) #最大数を5に指定 print(a_list) a = soup.find("a") #1つめだけ print(a) #<a href="#" id="sp-suggest-link">スマートフォン用の表示で見る</a> a = soup.a #1つめだけ print(a) #<a href="#" id="sp-suggest-link">スマートフォン用の表示で見る</a> a = soup.find("A") print(a) #None 存在しないとき。
○タグの属性の取得
print(soup.a.get("href")) ## print(soup.a.get("id")) #sp-suggest-link
○文字列の取得
print(soup.a.string) #スマートフォン用の表示で見る strings = soup.strings #ジェネレータ strings = soup.stripped_strings #空白文字を除去したジェネレータ
○入れ子のタグも取得できる。
最初のdivの中のaタグすべて
#最初のdivの中のaタグすべて da1 = soup.div.find_all("a") print(da1) #[<a href="#" id="sp-suggest-link">スマートフォン用の~ #最初のdivの中の最初のdivの中の最初のaタグ print(soup.div.div.a)
○条件を絞ったタグの取得
soup.find_all("a", class_="link", href="/link") #「class」はpythonの予約語 soup.find_all("a", attrs={"class": "link", "href": "/link"}) soup.find_all(class_="link", href="/link") soup.find_all(attrs={"class": "link", "href": "/link"})
○正規表現の利用
import re #bで始まるすべてのタグを取得 a = soup.find_all(re.compile("^b")) #print(a) #大量 #href属性として「link」という文字列を含むものすべて a = soup.find_all(href=re.compile("link")) #文字列にhelloを含むaタグすべて soup.find_all("a", text=re.compile("hello"))