BeautifulSoupとはHTML解析用のライブラリらしい。
【書式】
BeautifulSoup(解析対象のHTML/XML, 利用するパーサー)
パーサ(parser)とは、コンピュータプログラムのソースコードやXML文書など、何らかの言語で記述された構造的な文字データを解析し、プログラムで扱えるようなデータ構造の集合体に変換するプログラムのこと。そのような処理のことを「構文解析」「パース」(parse)という。
【コード】
import requests
from bs4 import BeautifulSoup
# webページを取得して解析する
# load_url="https://www.ymori.com/books/python2nen/test1.html"
html=requests.get(load_url)
soup=BeautifulSoup(html.content,"html.parser")
# HTML全体を表示する
print(soup)
【結果】
長いので省略
【書式】
要素=soup.find("タグ名")
ここで、「soup」はHTMLのテキストデータが入る。
オブジェクトの型は <class 'bs4.element.Tag'>
【コード】
import requests
from bs4 import BeautifulSoup
# webページを取得して解析する
# load_url="https://www.ymori.com/books/python2nen/test1.html"
html=requests.get(load_url)
soup=BeautifulSoup(html.content,"html.parser")
# タグを検索して表示する
print(soup.find("title"))
print(soup.find("h2"))
print(soup.find("li"))
# 以下、参考-----------
print("\n")
print("soupのデータ型",type(soup))
print("soup.fingのデータ型",type(soup.find("li")))
【結果】
<h2 id="第1章-小旅行の行先検討">第1章 小旅行の行先検討</h2>
<li>近場が良いか?</li>
soupのデータ型 <class 'bs4.BeautifulSoup'>
soup.fingのデータ型 <class 'bs4.element.Tag'>
(補足)HTMLタグ
(補足) オブジェクトの型を取得・確認: type()関数
組み込み関数type()は引数に渡したオブジェクトの型を返す。これを使ってオブジェクトの型を確認できる。
今度は、タグを抜いたテキスト情報を取得する。
【書式】
soup.find("タグ名").text
データ型:<class 'str'>
【コード】
import requests
from bs4 import BeautifulSoup
# webページを取得して解析する
# load_url="https://www.ymori.com/books/python2nen/test1.html"
html=requests.get(load_url)
soup=BeautifulSoup(html.content,"html.parser")
# タグを検索して表示する
print("HTMLを表示する\n")
print(soup.find("title"))
print(soup.find("h2"))
print(soup.find("li"))
print(type(soup.find("title")))
# テキスト情報を表示する
print("\n")
print("テキスト情報を表示する\n")
print(soup.find("title").text)
print(soup.find("h2").text)
print(soup.find("li").text)
print(type(soup.find("title").text))
【結果】
HTMLを表示する
<h2 id="第1章-小旅行の行先検討">第1章 小旅行の行先検討</h2>
<li>近場が良いか?</li>
<class 'bs4.element.Tag'>
テキスト情報を表示する
第1章 小旅行の行先検討
近場が良いか?
<class 'str'>
【書式】
soup.find(class_="クラス名")
【コード】
import requests
from bs4 import BeautifulSoup
response=requests.get(url)
soup=BeautifulSoup(response.content,"html.parser")
soup2=soup.find(class_="entry-content hatenablog-entry")
print(soup2)
【結果】
<div class="entry-content hatenablog-entry">
<p> </p>
<div id="chap1">
<h2 id="第1章-小旅行の行先検討">第1章 小旅行の行先検討</h2>
<ol>
<li>近場が良いか?</li>
<li>温泉が良いか?</li>
<li>電車か車か?</li>
</ol>
</div>
<div id="chap2">
<h2 id="第2章-到着したら飯にしよう">第2章 到着したら飯にしよう</h2>
<ol>
<li>早速のお食事</li>
<li>まずは、眺めて楽しもう</li>
<li>お上品に食べ進めよう</li>
<li>お酒はほどほどに!</li>
</ol>
</div>
<p><a href="https://20200105.hatenadiary.jp/entry/2021/05/02/000000">リンク1</a> <a href="../../../2021/02/07/000000">リンク2</a> <br/><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/h/hwk159/20200614/20200614142330.jpg"/> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/h/hwk159/20200614/20200614142318.jpg"/> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/h/hwk159/20200614/20200614142307.jpg"/></p>
</div>
【書式】
【コード】
import requests
from bs4 import BeautifulSoup
response=requests.get(url)
soup=BeautifulSoup(response.content,"html.parser").find(class_="entry-content hatenablog-entry")
print(soup)
【結果】
<div class="entry-content hatenablog-entry">
<p> </p>
<div id="chap1">
<h2 id="第1章-小旅行の行先検討">第1章 小旅行の行先検討</h2>
<ol>
<li>近場が良いか?</li>
<li>温泉が良いか?</li>
<li>電車か車か?</li>
</ol>
</div>
<div id="chap2">
<h2 id="第2章-到着したら飯にしよう">第2章 到着したら飯にしよう</h2>
<ol>
<li>早速のお食事</li>
<li>まずは、眺めて楽しもう</li>
<li>お上品に食べ進めよう</li>
<li>お酒はほどほどに!</li>
</ol>
</div>
<p><a href="https://20200105.hatenadiary.jp/entry/2021/05/02/000000">リンク1</a> <a href="../../../2021/02/07/000000">リンク2</a> <br/><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/h/hwk159/20200614/20200614142330.jpg"/> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/h/hwk159/20200614/20200614142318.jpg"/> <img src="https://cdn-ak.f.st-hatena.com/images/fotolife/h/hwk159/20200614/20200614142307.jpg"/></p>
</div>
【書式】
要素のリスト=soup.find_all("タグ名")
戻り値のデータ型:<class 'bs4.element.ResultSet'>
【コード】
import requests
from bs4 import BeautifulSoup
response=requests.get(url)
soup=BeautifulSoup(response.content,"html.parser").find(class_="entry-content hatenablog-entry")
# 全ての liタグを検索して、その文字列を表示する。
for element in soup.find_all("li"):
print(element.text)
【結果】
近場が良いか?
温泉が良いか?
電車か車か?
早速のお食事
まずは、眺めて楽しもう
お上品に食べ進めよう
お酒はほどほどに!
【書式】
【コード】
import requests
from bs4 import BeautifulSoup
response=requests.get(url)
soup=BeautifulSoup(response.content,"html.parser").find(class_="entry-content hatenablog-entry").find_all("li")
print(type(soup))
【結果】
<class 'bs4.element.ResultSet'>
【書式】
soup.find(id="検索名")
【コード】
import requests
from bs4 import BeautifulSoup
response=requests.get(url)
soup=BeautifulSoup(response.content,"html.parser").find(class_="entry-content hatenablog-entry")
# IDで検索して、そのタグの中身を表示する。
chap2=soup.find(id="chap2")
print(chap2)
【結果】
<div id="chap2">
<h2 id="第2章-到着したら飯にしよう">第2章 到着したら飯にしよう</h2>
<ol>
<li>早速のお食事</li>
<li>まずは、眺めて楽しもう</li>
<li>お上品に食べ進めよう</li>
<li>お酒はほどほどに!</li>
</ol>
</div>