Google検索結果の整理をPythonでやってみた
らずべりーです。お久しぶりのPythonネタ。 植物とも画像ともあまり関係がないネタですが。
Google検索の結果をリスト形式で保存しておきたかったので HTML解析(スクレイピングもどき)にトライしてみました。 HTML解析用のソフトって色々あるんですねー。 このあたりのページを参考にさせていただきました。
一番、手軽そうだったので、BeautifulSoup4というものを使って見ました。
Beautiful Soup: We called him Tortoise because he taught us.
Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation
実際のコードを書くにあたってはこちらのページを参考にさせていただきました。感謝!!
実行環境
目次
- Google検索 ~ HTMLファイルの保存
- パッケージのインポートとHTMLファイルの読み込み
- BeautifulSoup4で解析
- 結果をPandasの表形式で表示
手順
0. BeautifulSoup4とlxmlを入れておく
とりあえずどちらもpip install
で入れられるらしい。
BeautifulSoup4はAnacondaに一緒にパッケージされていて、私のMacにはすでに入っていました。
1. Google検索 ~ HTMLファイルの保存
素人がやって不可抗力でサイバー攻撃になっても嫌なので(恐れ)、手作業で検索して保存した.html
ファイルを解析することにしました。
なので、あまり自動化って感じもしないですが。
とりあえず、植物ブログらしく「花 図鑑」で検索して、flower_zukan.html
という名前で保存。
ちなみにGoogle Chromeを使えば、右クリック->検証でHTMLのソースが見れます。
のちのちの解析の参考に、、、
見る以外にも色々できるらしいのですが、まだやったことはないです。
このあたりを参照。
2. パッケージのインポートとHTMLファイルの読み込み
from bs4 import BeautifulSoup import pandas as pd import os current_path = os.getcwd() file_name = "flower_zukan.html" file_path = current_path + "/" + file_name f = open(file_path,"r")
とりあえず、普通にopen
で。
3. BeautifulSoup4で解析
HTML解析します。
soup = BeautifulSoup(f, "lxml")
終わり!!!
だと楽ですが、そうは問屋がおろさない。
先ほどのChromeのDeveloperツールとやらで、必要なタグをチェックし、情報を抽出してくる必要があります。見てみるとタイトルの情報は<h3 class="r" ほにゃらら>
の中に入っていたので
pages = soup.find_all("h3", class_="r") pages[0] #内容の確認
<h3 class="r"><a href="https://minhana.net/zukan/" onmousedown="return rwt(this,'','','','1','AOvVaw1ALjFe2utr27NeAd9yJ-5y','','0ahUKEwiiyuW_6ffYAhUKXLwKHXTNClwQFggoMAA','','',event)">花図鑑・植物図鑑を見る - みんなの花図鑑(掲載数:3,406件)</a></h3>
find_all
というのはタグを取ってくる時のおまじない的な。
他にもいくつかやり方はあるそうなのですが(select
とか)、この方法が一番簡単だったのでこれにしました。
さらに、ここからタイトルとリンクを別々に20ページ分、リスト化しました。
aタグの中身を取り出すのは.a
でOK。地文は.text
で、リンクは.get("href")
で取り出せます。
title = [pages[i].a.text for i in range(20)] link = [pages[i].a.get("href") for i in range(20)] title[0] #内容の確認
'花図鑑・植物図鑑を見る - みんなの花図鑑(掲載数:3,406件)'
link[0] #内容の確認
'https://minhana.net/zukan/'
4. 結果をPandasの表形式で表示
Pandasで表形式に直します。
pd.DataFrame([title,link], index = ["title","url"]).T
できた!!!
めでたしめでたし。