PythonのBeautiful Soupモジュールの使い方|Pythonで簡単にHTML解析をしてスクレイピングする方法

スポンサーリンク

今回は、Web ScrapingのためのPython Beautiful Soupモジュールに焦点を当て、詳しく解説していきます。

では、さっそく始めましょう

こちらもお読みください。


スポンサーリンク

Beautiful Soupを使ったWebスクレイピング – Crisp Overview

昨今、IT業界ではデータサイエンスや機械学習が先行しており、データの重要性が高まっています。

特定のドメインやトピックを考えるとき、データを取ってきて分析する方法はたくさんあります。

データを取ってきて分析するとなると、さまざまなウェブサイトからデータを集めて分析し、そこから可能性をポーリングすることになります。

これと同じような概念で、Webスクレイピングという概念が生まれました。

ウェブスクレイピングでは、ウェブページをサーフィンしてデータを検索し、ウェブページから必要なデータを収集し、カスタマイズされたフォーマットで簡単に入手することができます

それが、Webからのデータのスクレイピングと呼ばれる理由です。

スクレイピングについて理解したところで、PythonでWeb Scrapingを行うためのモジュールとしてBeautiful Soupを進めていきましょう。


Web Scraping 用 Python Beautiful Soup モジュール

Webスクレイピングのコンセプトは、口で言うほど簡単なものではありません。

まず、ウェブサイトからデータをスクレイピングしたいとき、データのためにマスターサーバーを要求するスクリプトを書く必要があります。

次に、スクリプトをカスタマイズして、ウェブページからデータをワークステーションにダウンロードします。

最後に、HTMLタグに基づいてスクレイピングしたい情報をカスタマイズし、特定の情報だけがウェブサイトからダウンロードされるようにすることができます

Pythonは、簡単にWebページからデータをスクレイピングするための様々な関数で構成されている美しいスープモジュールを私たちに提供します。

Beautiful Soupモジュールを使えば、HTML、XML、Webページ、ドキュメントなどを簡単にクロール、スクレイピングすることができます


Beautiful SoupでGoogle検索結果をスクレイプする

まずはBeautiful Soupモジュールを使って、scienceという単語をサーバーに対して検索した際のウェブページの結果をスクレイピングしてみます。

まず、Python環境にBeautifulSoupモジュールをロードする必要があります。

from bs4 import BeautifulSoup
import requests

ここで、検索対象となるWebページのURLを指定します。

また、データサイエンスに関連する投稿のWebリンクを取得するために、URLにscienceという単語を追加します。

さらに、スクレイプデータをダウンロードさせたいシステムとブラウザをサーバーに識別させるために、ユーザーエージェントヘッダーを設定します。

A = ("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
       "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36",
       "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
       )

さて、検索結果からダウンロードされるHTMLコンテンツのために、URLにGETリクエストを追加する必要があります。

requests.get(url, header)

さらに、ダウンロードしたHTMLコンテンツからHeader 3の値をすべてカスタマイズして取得します。

例えば、以下の様になります。

import requests
from bs4 import BeautifulSoup
import random
  
text = 'science'
url = 'https://google.com/search?q=' + text
A1 = ("Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
       "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36",
       "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
       )
  
Agent1 = A1[random.randrange(len(A1))]
  
headers = {'user-agent': Agent1}
requ = requests.get(url, headers=headers)
  
soup_obj = BeautifulSoup(requ.text, 'lxml')
for x in soup_obj.find_all('h3'):
    print(x.text)
    print('#######')

結果は以下の通りです。

Science
#######
American Association for the Advancement of Science (Nonprofit organization)
#######
Science (Peer-reviewed journal)
#######
Science | AAAS
#######
Science
#######
Science - Wikipedia
#######
ScienceDirect.com | Science, health and medical journals
#######
science | Definition, Disciplines, & Facts | Britannica
#######
Science News | The latest news from all areas of science
#######
Science - Home | Facebook
#######
Science Magazine - YouTube
#######
Department Of Science & Technology
#######

まとめ

ここまでで、このトピックは終了です。

何か質問があれば、お気軽にコメントください。

Pythonプログラミングに関連するこのような記事のために、私たちと一緒にご期待ください。

タイトルとURLをコピーしました