この美しいスープPythonチュートリアルでウェブサイトをスクレイピング

この美しいスープPythonチュートリアルでウェブサイトをスクレイピング

BeautifulSoupはオープンソースのPythonライブラリです。ナビゲートパーサーを使用して、XMLファイルとHTMLファイルのコンテンツをスクレイピングします。いくつかの分析目的でデータが必要です。ただし、PythonとWebスクレイピングを初めて使用する場合は、PythonのBeautifulSoupライブラリをWebスクレイピングプロジェクトで試す価値があります。





PythonのオープンソースのBeautifulSoupライブラリを使用すると、プロセスを最大限に制御しながら、Webページの任意の部分または要素をスクレイピングすることでデータを取得できます。この記事では、BeautifulSoupを使用してWebサイトをスクレイピングする方法について説明します。





美しいスープをインストールして使い始める方法

先に進む前に、この美しいスープのチュートリアル記事では、Python3と beautifulsoup4 、BeautifulSoupの最新バージョン。あなたが Python仮想環境を作成する プロジェクトとそのパッケージをローカルマシン上のものから分離します。





ドット抜けをチェックする方法

開始するには、仮想環境にBeautifulSoupライブラリをインストールする必要があります。 Beautiful Soupは、すべてのオペレーティングシステムでPyPiパッケージとして利用できるため、 pip install beautifulsoup4 ターミナル経由のコマンド。

ただし、DebianまたはLinuxを使用している場合は、上記のコマンドは引き続き機能しますが、を実行することでパッケージマネージャーを使用してインストールできます。 apt-get install python3-bs4



BeautifulSoupはURLを直接取得しません。既製のHTMLまたはXMLファイルでのみ機能します。つまり、URLを直接渡すことはできません。この問題を解決するには、Beautiful Soupにフィードする前に、Pythonのリクエストライブラリを使用してターゲットWebサイトのURLを取得する必要があります。

そのライブラリをスクレーパーで使用できるようにするには、 pipインストールリクエスト ターミナル経由のコマンド。





XMLパーサーライブラリを使用するには、 pip install lxml それをインストールします。

スクレイピングしたいWebページを調べます

なじみのないWebサイトをスクレイピングする前に、その要素を調べることをお勧めします。これを行うには、ブラウザを開発者モードに切り替えます。とても簡単です ChromeDevToolsを使用する GoogleChromeを使用している場合。





ただし、Webページを調べて、そのHTMLタグ、属性、クラス、およびIDについて詳しく知る必要があります。これを行うと、Webページのコア要素とそのコンテンツタイプが公開されます。

また、Webサイトから必要な正確なデータを取得するために使用できる最善の戦略と、それを取得する方法を開発するのにも役立ちます。

美しいスープでウェブサイトのデータをスクレイピングする方法

すべての準備が整ったので、優先コードエディターを開き、新しいPythonファイルを作成して、選択した名前を付けます。ただし、 JupyterNotebookのようなWebベースのIDEを利用する コマンドラインからPythonを実行することに慣れていない場合。

次に、必要なライブラリをインポートします。

from bs4 import BeautifulSoup
import requests

まず、リクエストライブラリがどのように機能するかを見てみましょう。

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
print(website)

上記のコードを実行すると、リクエストが成功したことを示す200ステータスが返されます。それ以外の場合は、GET要求の失敗を示す400ステータスまたはその他のエラーステータスが表示されます。

かっこ内のWebサイトのURLを常にターゲットURLに置き換えることを忘れないでください。

あなたがでウェブサイトを取得したら 得る リクエストを送信すると、Beautiful Soupに渡されます。BeautifulSoupは、選択した形式に応じて、組み込みのXMLまたはHTMLパーサーを使用してコンテンツをHTMLまたはXMLファイルとして読み取ることができます。

この次のコードスニペットを見て、HTMLパーサーでこれを行う方法を確認してください。

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup)

上記のコードは、コンテンツを含むWebページのDOM全体を返します。

DOMを使用して、より整合性の高いバージョンのDOMを取得することもできます。 prettify 方法。これを試して、その出力を確認できます。

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.prettify())

また、要素をロードせずにWebページの純粋なコンテンツを取得することもできます。 。文章 方法:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.text)

タグ名でウェブページのコンテンツをスクレイピングする方法

また、BeautifulSoupを使用して特定のタグのコンテンツをスクレイピングすることもできます。これを行うには、BeautifulSoupスクレーパーリクエストにターゲットタグの名前を含める必要があります。

たとえば、コンテンツを取得する方法を見てみましょう。 h2 ウェブページのタグ。

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.h2)

上記のコードスニペットでは、 soup.h2 最初を返します h2 ウェブページの要素であり、残りは無視されます。すべてをロードするには h2 要素、あなたは使用することができます find_all 組み込み関数と にとって Pythonのループ:

マウスが独自のウィンドウ上を移動する10
from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups)

そのコードブロックはすべてを返します h2 要素とその内容。ただし、タグを使用せずにコンテンツを取得するには、 。ストリング 方法:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups.string)

このメソッドは、任意のHTMLタグに使用できます。あなたがする必要があるのは交換することです h2 あなたが好きなものでタグを付けます。

ただし、タグのリストをに渡すことで、さらに多くのタグをスクレイプすることもできます。 find_all 方法。たとえば、以下のコードのブロックは、 h2 、 と 題名 タグ:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
tags = soup.find_all(['a', 'h2', 'title'])
for soups in tags:
print(soups.string)

IDとクラス名を使用してWebページをスクレイピングする方法

DevToolsを使用してWebサイトを検査すると、DOM内の各要素を保持しているid属性とclass属性について詳しく知ることができます。その情報を入手したら、この方法を使用してそのWebページをスクレイピングできます。これは、ターゲットコンポーネントのコンテンツがデータベースからループアウトしている場合に役立ちます。

あなたは使用することができます 探す IDおよびクラススクレーパーのメソッド。とは異なり find_all 反復可能なオブジェクトを返すメソッド、 探す メソッドは、単一の反復不可能なターゲットで機能します。 id この場合。したがって、を使用する必要はありません にとって それでループします。

idを使用して以下のページのコンテンツをスクレイピングする方法の例を見てみましょう。

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
id = soup.find(id = 'enter the target id here')
print(id.text)

クラス名に対してこれを行うには、 idクラス 。しかし、書く クラス Pythonはそれをキーワードと見なすため、構文が直接混乱します。このエラーを回避するには、次のようにクラスの前にアンダースコアを記述する必要があります。 クラス_

基本的に、IDを含む行は次のようになります。

my_classes = soup.find(class_ = 'enter the target class name here')
print(my_classes.text)

ただし、対応するIDまたはクラスを使用して特定のタグ名を呼び出すことにより、Webページをスクレイピングすることもできます。

data = soup.find_all('div', class_ = 'enter the target class name here')
print(data)

美しいスープで再利用可能なスクレーパーを作る方法

クラスを作成し、以前のすべてのコードをそのクラスの関数にまとめて、いくつかのタグとそのIDのコンテンツを取得する再利用可能なスクレーパーを作成できます。これを行うには、URL、2つのタグ名、およびそれらに対応するIDまたはクラスの5つの引数を受け入れる関数を作成します。

eコマースWebサイトからシャツの価格を取得したいとします。以下のスクレーパークラスの例では、価格タグとシャツタグを対応するIDまたはクラスとともに抽出し、それを「Price」とShirt_nameを列名として持つPandasデータフレームとして返します。

あなたが pip install pandas まだ行っていない場合は、ターミナル経由。

import pandas as pd
class scrapeit:
try:
def scrape(website=None, tag1=None, id1=None, tag2=None, id2=None):
if not (website and tag1 and id1 and tag2 and id2)==None:
try:
page = requests.get(website)
soup = BeautifulSoup(page.content, 'html.parser')
infotag1 = soup.find_all(tag1, id1)
infotag2 = soup.find_all(tag2, id2)
priced = [prices.text for prices in infotag1]
shirt = [shirts.text for shirts in infotag2]
data = {
'Price':priced,
'Shirt_name':shirt}
info = pd.DataFrame(data, columns=['Price', 'Shirt_name'])
print(info)
except:
print('Not successful')
else:
print('Oops! Please enter a website, two tags and thier corresponding ids')
except:
print('Not successful!')

作成したスクレーパーは再利用可能なモジュールであり、インポートして別のPythonファイルで使用できます。を呼び出すには スクレイピング そのクラスからの関数、あなたは使用します scareit.scrape( 'ウェブサイトのURL'、 'price_tag'、 'price_id'、 'shirt_tag'、 'shirt_id') 。 URLやその他のパラメータを指定しない場合は、 そうしないと ステートメントはそうするように促します。

そのスケーパーを別のPythonファイルで使用するには、次のようにインポートします。

from scraper_module import scrapeit
scrapeit.scrape('URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id')

ノート: scarer_module スクレーパークラスを保持するPythonファイルの名前です。

確認することもできます 美しいスープのドキュメント それを最大限に活用する方法をさらに深く掘り下げたい場合。

美しいスープは貴重なウェブスクレイピングツールです

Beautiful Soupは、スクレイピング中にデータがどのように通過するかを制御できる強力なPythonスクリーンスクレイパーです。価格設定や市場動向など、競合他社のWebデータにアクセスできるため、貴重なビジネスツールです。

Macでカメラを有効にする方法

この記事ではタグスクレイパーを作成しましたが、この強力なPythonライブラリを試して、より便利なスクレイピングツールを作成することもできます。

共有 共有 つぶやき Eメール オンラインで最高のWebスクレイピングツール

分析目的でウェブサイトからデータを収集する必要がありますか?これらのウェブスクレイピングツールはそれを簡単にします。

次を読む
関連トピック
  • プログラミング
  • Python
著者について イディソウオミソラ(94件の記事が公開されました)

Idowuは、スマートな技術と生産性に情熱を注いでいます。暇なときは、コーディングで遊んだり、退屈したときにチェス盤に切り替えたりしますが、たまに日常から離れることも大好きです。人々に現代の技術の道を示すことへの彼の情熱は、彼がもっと書くように動機づけます。

IdowuOmisolaのその他の作品

ニュースレターを購読する

ニュースレターに参加して、技術的なヒント、レビュー、無料の電子書籍、限定セールを入手してください。

購読するにはここをクリックしてください