Pythonにおける「idやclassで検索範囲を絞り込む」

ここではPythonにおける「HTMLを解析する」「idやclassで検索範囲を絞り込む」ことについて説明しています。 Beautiful Soupを使って。

前回こちらのコンテンツにて「すべてのタグを探して表示する」ことを「.find_all(“タグ名”)」で学びました。

しかし、これは指定したタグの要素を「すべて」見つけて取り出す命令でした。

この部分のこれだけを取り出したい、というような場合はこれではだめですね

そこで今度はidやclassで検索範囲を絞り込んで表示する命令をしたいと思います。

今回、テスト用として自前で下記のような簡単なWEBページサンプルを用意してみました。

HTML <!DOCTYPE html>
<html lang=”ja”>
<head>
<meta charset=”UTF-8″>
<meta http-equiv=”X-UA-Compatible” content=”IE=edge”>
<meta name=”viewport” content=”width=device-width, initial-scale=1.0″>
<title>Python すべてのタグを探して表示する</title>
</head>
<body>
<div id=”chapter1″>
<h2>学ぼう、プログラミング</h2>
<ol>
<li>HTML</li>
<li>CSS</li>
<li>Javascript</li>
</ol>
</div>
<div id=”chapter2″>
<h2>もっと学ぼう、プログラミング</h2>
<ol>
<li>Vue.js</li>
<li>Jquery</li>
<li>Python</li>
</ol>
</div>
<a href=”http://www.roadtoupload.com”>チャレンジ プログラミング</a><br>
<a href=”http://www.kenkosale.net”>健康情報</a> <br>
<img src=”IMG_20201024_160706.jpg” width=”200px” height=”200px”>
<img src=”IMG_20201108_133625.jpg” width=”200px” height=”200px”>
<img src=”IMG_20201031_114146.jpg” width=”200px” height=”200px”>
</body>
</html>

完成はこんな感じです。


このHTMLをスクレイピングしてみましょう。

まずは、「id=chapter2」を探して、表示させてみます。


書式:idで探して取り出す 要素 = soup.find(id=”id名”)

書式:classで探して要素を取り出す 要素 = soup.find(class_”class”名)
「class」はPythonの予約語でそのまま使えないので「class_」と書きます。

import requests
from bs4 import BeautifulSoup

load_url = “https://www.roadtoupload.com/学びファイル/python2年生/Python_sample1.html”
html = requests.get(load_url)
soup = BeautifulSoup(html.content, “html.parser”)

chapter2 = soup.find(id=”chapter2″)
print(chapter2)

解説

import requests事前にコマンドプロンプトでインストールしたインターネットにアクセス命令する外部ライブラリ「requests」、これをimportします。
from bs4 import BeautifulSoup事前にコマンドプロンプトでインストールしたHTMLを解析する外部ライブラリ「BeautifulSoup」、これが入っているbs4というパッケージからBeautifulSoupをimport
load_url = “https://www.roadtoupload.com/学びファイル/python2年生/Python_sample1.html”変数load_urlに解析するWEBページアドレスを代入
html = requests.get(load_url)変数htmlにネット上のHTMLファイルを読み込む命令のrequests.get(load_url)を代入します。
soup = BeautifulSoup(html.content, “html.parser”)変数soupにBeautifulSoupを使ったHTML解析の命令を代入します。
chapter2 = soup.find(id=”chapter2″)変数chapter2に指定したidの範囲を検索して代入します。
print(chapter2)データを表示します。

実行結果


しっかり指定のid部分を取り出せて表示することができました。

今度はこの要素に対してliタグをすべて取り出してみましょう。

import requests
from bs4 import BeautifulSoup

load_url = “https://www.roadtoupload.com/学びファイル/python2年生/Python_sample1.html”
html = requests.get(load_url)
soup = BeautifulSoup(html.content, “html.parser”)

chapter2 = soup.find(id=”chapter2″)
for element in chapter2.find_all(“li”):
print(element.text)

解説

import requests事前にコマンドプロンプトでインストールしたインターネットにアクセス命令する外部ライブラリ「requests」、これをimportします。
from bs4 import BeautifulSoup事前にコマンドプロンプトでインストールしたHTMLを解析する外部ライブラリ「BeautifulSoup」、これが入っているbs4というパッケージからBeautifulSoupをimport
load_url = “https://www.roadtoupload.com/学びファイル/python2年生/Python_sample1.html”変数load_urlに解析するWEBページアドレスを代入
html = requests.get(load_url)変数htmlにネット上のHTMLファイルを読み込む命令のrequests.get(load_url)を代入します。
soup = BeautifulSoup(html.content, “html.parser”)変数soupにBeautifulSoupを使ったHTML解析の命令を代入します。
chapter2 = soup.find(id=”chapter2″)変数chapter2に指定したidの範囲を検索して代入します。
for element in chapter2.find_all(“li”):リストの中身を1つずつ取り出すためfor文を使います。
print(element.text).textを付けて文字列だけを取り出し、データを表示します。

実行結果


うまく取り出すことができました。

*尚、ここではバージョン「Python 3.10.1」を使用しています。

この本から引用、参考に学び、完成させることができました。しかし、ここではプログラミング初心者の私が詳しく解説することは、おこがましく、難しく出来ません(ToT)
その点、この本では丁寧な解説が載っていますので、解説とともにコードを書き、完成させればより深く学ぶことができます(^.^)、実際、初心者の私でもわかりやすかったです。身に付け消えないスキルが2,000円程ならコスパよく、買っておいてよかったと満足してます。


わからないことはプロフェッショナルから学ぶのが一番

キャリアアップに必要なスキルを取得しよう。

オンラインで受講ができるスクールですので、全国どこからでも。