\r\n\r\n

Pythonチュートリアルでウェブサイトをブラウズする

ウェブクローリングに興味がありますか? ここでは、beautiful soup python libraryを使ってウェブサイトのコンテンツを検索する方法について説明します...

Pretty Soup は、オープンソースの Python ライブラリです。ナビゲーションパーサーを使用して、XMLやHTMLファイルの内容をクロールします。さまざまな分析目的のためにデータが必要になります。しかし、もしあなたがPythonやウェブクローリングにまだ慣れていないのであれば、Pythonの美しいSoupライブラリはウェブクローリングプロジェクトのためにチェックアウトする価値があります。

Pythonのオープンソースの美しいSoupライブラリを使用すると、Webページの任意の部分または要素をスクレイピングしてデータを取得し、そのプロセスを最大限に制御することができます。今回は、美しいスープスクレイピングサイトの使い方を紹介します。

プリティスープのインストール方法と使い始め方

その前に、このBeautiful Soupチュートリアル記事では、python3とBeautiful Soupの最新バージョンであるbeautifulsoup4を使用します。プロジェクトとそのパッケージをローカルコンピュータから分離するPython仮想環境を作成することを確認してください。

はじめに、仮想環境に Beautiful Soup ライブラリをインストールする必要があります。 beautifulSoup はすべての OS で PyPi パッケージとして提供されているので、ターミナルから pip install beautifulsoup4 コマンドでインストールすることができます。

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

Pretty Soupは、URLに対して直接スクレイピングを行いません。それは、既製のHTMLまたはXMLファイルに対してのみ機能します。つまり、URLを直接渡すことはできない。これを回避するためには、まずPythonのリクエストライブラリで対象サイトのURLを取得し、Beautiful Soupに提供する必要があります。

scraperでライブラリを利用できるようにするには、ターミナルからpip install requestsコマンドを実行します。

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

スクレイピングしたいページを確認する

見慣れないサイトを削除する前に、そのサイトを構成する要素を確認するのがベストな方法です。ブラウザを開発者モードにすることで可能です。Google Chromeを使用している場合、Chrome DevToolsを使用すると非常に簡単です。

しかし、HTMLのタグや属性、クラス、IDなどを知るためには、Webページを調べる必要がある。そうすることで、ページの核となる要素とそのコンテンツタイプを公開することができます。

また、サイトから欲しいデータを正確に取得するために、どのような方法でデータを取得すればよいのか、最適な戦略を立てることも可能です。

素敵なスープでウェブサイトデータをスクレイピングする方法

すべての準備が整ったので、好みのコードエディタを開き、新しいPythonファイルを作成し、任意の名前を付けます。しかし、コマンドラインからのPythonの実行に慣れていない場合は、Jupyter NotebookのようなWebベースのideを使用することも可能です。

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

from bs4 import BeautifulSoupimport requests

まず、リクエストライブラリの仕組みを見てみましょう。

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

上記のコードを実行すると、リクエストに成功したことを示す200ステータスが返されます。そうでない場合は、getリクエストに失敗したことを示す400ステータスやその他のエラーステータスが表示されます。

括弧内のウェブサイトURLは、必ず対象URLに置き換えてください。

getリクエストでサイトを取得し、Beautiful Soupに渡すと、内蔵のXMLまたはHTMLパーサーを使って、選択したフォーマットに応じてコンテンツをHTMLまたはXMLファイルとして読み込むことができるようになります。

HTMLパーサーを使用してこの操作を行う方法については、次のコードスニペットを参照してください。

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

上記のコードは、ページのDOM全体とその内容を返します。

また、prettifyメソッドを使用することで、より一貫性のあるDOMを得ることができますので、その出力も試してみてください。

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

また、.textメソッドを使用すると、ウェブページの要素を読み込むことなく、純粋な内容を取得することができます。

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

タグ名からウェブコンテンツをスクレイピングする方法

また、素敵なスープを使って特定のタグの内容をスクレイピングすることができます。これを行うには、ターゲットタグの名前がリクエストに含まれていることが必要です。

例えば、Webページのh2タグの内容を取得する方法を見てみましょう。

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

上記のコードでは、soup.h2はページの最初のh2要素を返し、残りは無視します。すべてのh2要素を読み込むには、以下の場所で、findiiu all組み込み関数とPythonのforループを使用することができます。

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

このブロックは、すべてのh2要素とその内容を返します。しかし、マークアップを読み込まずに内容を取得するために、.stringメソッドを使用することができます:。

from bs4 import BeautifulSoupimport requestswebsite = 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ētu allメソッドに渡すことで、より多くのタグを取得することも可能です。たとえば、次のようなコードのブロックは、a、h2、およびtitleタグの内容を削除します。

from bs4 import BeautifulSoupimport requestswebsite = 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とクラス名を使ってウェブをクロールする方法

DevToolsを使ってサイトを検査した後、DOMに含まれる各要素のidとclass属性について詳しく知ることができます。その情報があれば、この方法を使ってページをスクレイピングすることができます。対象コンポーネントのコンテンツがデータベースからループアウトしている場合に有効です。

idとclassの両方のスクレイパーでfindメソッドを使用することができます。イテレート可能なオブジェクトを返す findttp all メソッドとは異なり、find メソッドはイテレート不可能な対象(この場合は id)に対して動作するため、for ループを使用する必要はありません。

IDを使って、以下のページの内容をスクレイピングする例を見てみましょう。

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

クラス名に対してこの操作を行うには、idをclassに置き換えます。しかし、クラスを書くと、Pythonがそれをキーワードとして扱うため、直接的に構文の混乱につながります。このエラーを回避するには、次のようにクラスの前にアンダースコアを記述してください: class.

本来、idを含む行は、こうなる。

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

しかし、対応するidやclassを持つ特定のタグ名を呼び出すことで、ページをスクレイピングすることもできます。

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

素敵なスープの使い方** 繰り返し使えるスパチュラ

クラスを作成し、そのクラス内の関数にこれまでのコードをすべて入れれば、いくつかのトークンの内容とそのIDを受け取る再利用可能なスクレイパーを生成することができます。そのためには、URL、2つのタグ名、それに対応するIDまたはクラスという5つのパラメータを受け取る関数を作成します。

例えば、あるEコマースサイトからシャツの値段をかき集めたいとします。次の例のスクレイパークラスは、価格とシャツのタグとそれに対応するidやclassを抽出し、"price "とシャツのtetsuの名前をカラム名としてPandasデータフレームで返します。

まだpandasを端末pipでインストールしていない場合は、端末pipでpandasがインストールされていることを確認してください。

import pandas as pdclass 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ファイルでインポートして使用することができる再利用可能なモジュールです。そのクラスからscrape関数を呼び出すには、scrapingを使用します。scrape ('Website URL', 'priceu tag', 'priceu id', 'shirtu tag', 'shirtu id').URLやその他のパラメータが提供されていない場合、else文がそのように促す。

他のPythonファイルでscaperを使用するには、次のようにインポートします。

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

注意:scraper-ju module は scraper クラスを含む Python ファイルの名前です。

また、より深く最適な活用方法を知りたい場合は、美しいスープのドキュメントをご覧ください。

プリティスープは貴重なウェブクローリングツールです

BeautifulSoupは、スクレイピング処理中にデータの転送方法を制御できる、強力なPythonスクリーンスクレイパーです。価格や市場動向など、競合他社のウェブデータにアクセスできるため、貴重なビジネスツールになります。

この記事では、**マーカースクレイパーを紹介しましたが、この強力なPythonライブラリを使えば、**より便利なスクレイパーツールを利用することができます。

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ