Beautiful Soupの使い方ノート
簡単にHTMLを解析できるライブラリBeautiful Soupの使い方のノートです。
find
基本
Webページを取得してテキストファイルに書き込む。
import requests
url = "https://アドレス"
htmlpage = requests.get(url) # Webページの取得
htmlpage.encoding = htmlpage.apparent_encoding # 文字化け回避
filename = "ファイル名.txt"
with open(filename, mode="w") as f: # ファイルを書き込みモードで開く
f.write(htmlpage.text) # 取得したデータを書き込む
タグ・id・classで検索
Webページを取得してBeautiful Soupを使って解析し、findで検索する。
import requests
from bs4 import BeautifulSoup
url = "https://アドレス.html"
htmlpage = requests.get(url) # Webページの取得
soup = BeautifulSoup(htmlpage.content, "html.parser") # htmlを解析する
# 最初のh2タグの中の文字列を表示する
print(soup.find("h2").text)
# 全てのliタグを検索して文字列を表示する
for element in soup.find_all("li"):
print(element.text)
# idで検索する
soup.find(id="id名")
# classで検索する
soup.find(class_="class名") # classはPythonの予約語なのでclass_と書く
# タグとclass属性で検索する
soup.find("タグ名", class_="class名")
属性を取り出す
findで検索して属性を取り出す。
import requests
from bs4 import BeautifulSoup
import urllib
load_url = "https://アドレス.html"
htmlpage = requests.get(load_url) # Webページの取得
soup = BeautifulSoup(htmlpage.content, "html.parser") # htmlを解析する
# h2タグの中の文字列を取り出して表示する
print(soup.find("h2").text)
# aタグを全て検索してhref属性を取り出す
for element in soup.find_all("a"): # 全てのaタグを検索
url = element.get("href") # href属性を取り出す(相対的URL)
url_z = urllib.parse.urljoin(load_url, url) # 絶対URL
print(url_z)
画像ファイルの取得(画像のアドレス固定)
画像のURLからファイルを取り出す。
import requests
from pathlib import Path
folderpath = Path("download")
folderpath.mkdir(exist_ok=True) # フォルダを作成
img_url = "https://アドレス.png"
imgdata = requests.get(img_url)
# 画像のファイル名を取り出す
imgname = img_url.split("/")[-1] # アドレスの一番最後
out_path = folderpath.joinpath(imgname) # アドレスをフォルダ名と連結する
# 画像データをファイルに書き出す
with open(out_path, mode="wb") as f: # バイナリー書き込みモードで開く
f.write(imgdata.content)
画像ファイルの取得
画像のURLからファイルを取り出す。
import requests
from bs4 import BeautifulSoup
from pathlib import Path
import urllib
import time
load_url = "https://アドレス.html"
htmlpage = requests.get(load_url)
soup = BeautifulSoup(htmlpage.content, "html.parser")
# 保存用フォルダ作成
folder = Path("download")
folder.mkdir(exist_ok=True)
# imgタグを全部検索してリンクを取得
for element in soup.find_all("img"): # imgタグを検索
src = element.get("src") # src属性を取得
# 画像データ取得
img_url = urllib.parse.urljoin(load_url, src) # 絶対URLを取得
imgdata = requests.get(img_url)
# ファイル名
imgname = img_url.split("/")[-1] # ファイル名を取得
path = folder.joinpath(imgname)
# 画像データをファイルに保存する
with open(path, mode="wb") as f:
f.write(imgdata.content)
time.sleep(1) # 1秒待つ