Python Webスクレイピングのチュートリアル

Python Webスクレイピングのチュートリアル

Web スクレイピングは、Web サイトからデータを抽出するプロセスであり、広大なインターネットから情報を収集するための強力な技術として登場しました。このチュートリアルでは、Web スクレイピングに一般的に使用されるさまざまな Python ライブラリとモジュールを調査し、このタスクに Python 3 が推奨される理由を詳しく説明します。

Python Webスクレイピングに必須のパッケージとツール

最新バージョンの パイソン は、Web スクレイピング用に特別に設計された豊富なツールとライブラリのセットを提供し、これまで以上に簡単に Web から効率的かつ効果的にデータを取得できるようにします。

目次

リクエストモジュール

リクエスト ライブラリは、特定の URL に HTTP リクエストを送信し、応答を返すために使用されます。 Python リクエストには、リクエストとレスポンスの両方を管理するための機能が組み込まれています。

pip install requests 

例: リクエストの作成

Python リクエスト モジュールには、GET、POST、PUT、PATCH、または HEAD リクエストを使用して、指定された URI に HTTP リクエストを行うための組み込みメソッドがいくつかあります。 HTTP リクエストは、指定された URI からデータを取得するか、サーバーにデータをプッシュすることを目的としています。これは、クライアントとサーバー間の要求/応答プロトコルとして機能します。ここでは GET リクエストを使用します。の GETメソッド は、指定された URI を使用して指定されたサーバーから情報を取得するために使用されます。 GET メソッドは、エンコードされたユーザー情報をページ要求に追加して送信します。

パイソン
import requests # Making a GET request r = requests.get('https://www.techcodeview.com) # check status code for response received # success code - 200 print(r) # print content of request print(r.content) 

出力

GET リクエストを行う Python リクエスト

詳細については、こちらを参照してください。 Python リクエストのチュートリアル

美しいスープ ライブラリー

Beautiful Soup は、解析ツリーをガイド、検索、変更するためのいくつかの簡単なメソッドと Python フレーズを提供します。これは、ドキュメントを調べて必要なものを削除するためのツールキットです。アプリケーションを文書化するのに多くのコードは必要ありません。

Beautiful Soup は、受信レコードを Unicode に、送信フォームを UTF-8 に自動的に変換します。ドキュメントでエンコーディングが定義されておらず、Beautiful Soup がエンコーディングをキャッチできない場合を除き、エンコーディングについて考える必要はありません。その後、元のエンコーディングを選択するだけです。 Beautiful Soup は、LXML や HTML などの有名な Python パーサーの上に位置し、さまざまな解析戦略を試したり、速度と引き換えに柔軟性を確保したりできます。

pip install beautifulsoup4 

  1. ライブラリのインポート: このコードは、HTTP リクエストを作成するためのリクエスト ライブラリと、HTML を解析するための bs4 ライブラリから BeautifulSoup クラスをインポートします。
  2. GET リクエストの作成: GET リクエストを「https://www.techcodeview.com」に送信します。
  3. ステータスコードの確認: 応答のステータス コード (通常、成功の場合は 200) が出力されます。
  4. HTMLの解析 : 応答の HTML コンテンツは BeautifulSoup を使用して解析され、変数Soupに保存されます。
  5. 整形された HTML を印刷する: 読みやすさと分析のために、解析された HTML コンテンツの整形されたバージョンが印刷されます。
パイソン
import requests from bs4 import BeautifulSoup # Making a GET request r = requests.get('https://www.techcodeview.com) # check status code for response received # success code - 200 print(r) # Parsing the HTML soup = BeautifulSoup(r.content, 'html.parser') print(soup.prettify()) 

出力

Python BeautifulSoup による HTML の解析

クラスによる要素の検索

ここで、HTML コンテンツからいくつかの有用なデータを抽出したいと思います。スープ オブジェクトには、プログラムで抽出できる入れ子構造のすべてのデータが含まれています。スクレイピングしたい Web サイトには大量のテキストが含まれているため、これらのコンテンツをすべてスクレイピングしましょう。まず、スクレイピングする Web ページを調べてみましょう。


上の画像では、ページのすべてのコンテンツが、クラスentry-contentを持つdivの下にあることがわかります。 find クラスを使用します。このクラスは、指定された属性を持つ指定されたタグを検索します。私たちの場合、エントリコンテンツとしてクラスを持つすべての div が検索されます。

ページのコンテンツが

鬼ごっこ。次に、このクラスに存在するすべての p タグを見つける必要があります。使用できます すべてを見つける BeautifulSoup のクラス。

パイソン
import requests from bs4 import BeautifulSoup # Making a GET request r = requests.get('https://www.techcodeview.com) # Parsing the HTML soup = BeautifulSoup(r.content, 'html.parser') s = soup.find('div', class_='entry-content') content = s.find_all('p') print(content) 

出力:

すべて検索BS4

詳細については、こちらを参照してください。 パイソンの美しいスープ

セレン

Selenium は、Web ブラウザの自動化に使用される人気のある Python モジュールです。これにより、開発者は Web ブラウザをプログラムで制御し、Web スクレイピング、自動テスト、Web アプリケーションの対話などのタスクを実行できるようになります。 Selenium は、Chrome、Firefox、Safari、Edge などのさまざまな Web ブラウザをサポートしており、ブラウザ自動化のための多用途ツールとなっています。

1: Firefoxの場合

この特定の例では、クエリ パラメータ geeksforgeeks を使用してブラウザを Google 検索ページに誘導しています。ブラウザーがこのページをロードすると、Selenium を使用してプログラムでページとの対話を続行できます。このインタラクションには、検索結果の抽出、リンクのクリック、ページからの特定のコンテンツのスクレイピングなどのタスクが含まれる場合があります。

パイソン
# import webdriver  from selenium import webdriver # create webdriver object  driver = webdriver.Firefox() # get google.co.in  driver.get('https://google.co.in / search?q = geeksforgeeks') 

出力

Firefox用

例 2: Chrome の場合

  1. Selenium ライブラリから Webdriver モジュールをインポートします。
  2. Web ドライバー実行可能ファイルへのパスを指定します。ブラウザに適切なドライバーをダウンロードし、そのドライバーへのパスを指定する必要があります。この例では、Chrome ドライバーを使用しています。
  3. webdriver.Chrome() を使用して Web ブラウザの新しいインスタンスを作成し、Chrome ドライバ実行可能ファイルへのパスを引数として渡します。
  4. ブラウザ オブジェクトの get() メソッドを呼び出し、Web ページの URL を渡すことによって、Web ページに移動します。
  5. Selenium が提供するさまざまな方法を使用して、Web ページから情報を抽出します。この例では、ブラウザ オブジェクトの title 属性を使用してページ タイトルを取得します。
  6. 最後に、quit() メソッドを使用してブラウザを閉じます。
パイソン
# importing necessary packages from selenium import webdriver from selenium.webdriver.common.by import By from webdriver_manager.chrome import ChromeDriverManager # for holding the resultant list element_list = [] for page in range(1, 3, 1): page_url = 'https://webscraper.io/test-sites/e-commerce/static/computers/laptops?page=' + str(page) driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get(page_url) title = driver.find_elements(By.CLASS_NAME, 'title') price = driver.find_elements(By.CLASS_NAME, 'price') description = driver.find_elements(By.CLASS_NAME, 'description') rating = driver.find_elements(By.CLASS_NAME, 'ratings') for i in range(len(title)): element_list.append([title[i].text, price[i].text, description[i].text, rating[i].text]) print(element_list) #closing the driver driver.close() 

出力

詳細については、こちらを参照してください。 Python セレン

Lxml

Python の lxml モジュールは、XML ドキュメントと HTML ドキュメントを処理するための強力なライブラリです。シンプルな Python API とともに、高性能の XML および HTML 解析機能を提供します。 lxml は、その速度、柔軟性、使いやすさにより、Python Web スクレイピングで広く使用されています。

pip install lxml 

以下は、Python Web スクレイピングに lxml モジュールを使用する方法を示す簡単な例です。

  1. HTTP リクエストを送信するための request モジュールとともに lxml から html モジュールをインポートします。
  2. スクレイピングしたいWebサイトのURLを定義します。
  3. request.get() 関数を使用して HTTP GET リクエストを Web サイトに送信し、ページの HTML コンテンツを取得します。
  4. lxml の html.fromstring() 関数を使用して HTML コンテンツを解析し、HTML 要素ツリーを返します。
  5. XPath 式を使用して、HTML ツリーから特定の要素を抽出します。この場合、すべてのテキスト コンテンツを抽出しています。 ページ上の (アンカー) 要素。
  6. 抽出されたリンク タイトルを反復処理して出力します。
パイソン
from lxml import html import requests # Define the URL of the website to scrape url = 'https://example.com' # Send an HTTP request to the website and retrieve the HTML content response = requests.get(url) # Parse the HTML content using lxml tree = html.fromstring(response.content) # Extract specific elements from the HTML tree using XPath # For example, let's extract the titles of all the links on the page link_titles = tree.xpath('//a/text()') # Print the extracted link titles for title in link_titles: print(title) 

出力

More information... 

URLlibモジュール

Python の urllib モジュールは、URL を操作するための関数を提供する組み込みライブラリです。 URL (Uniform Resource Locator) を取得したり、そこからデータを開いて読み取ったり、エンコードや解析などのその他の URL 関連タスクを実行したりすることで、Web ページと対話できるようになります。 Urllib は、次のような URL を操作するためのいくつかのモジュールを集めたパッケージです。

  • 開いて読み取るための urllib.request。
  • URLを解析するためのurllib.parse
  • 発生した例外の urllib.error
  • robot.txt ファイルを解析するための urllib.robotparser

urllib が環境に存在しない場合は、以下のコードを実行してインストールします。

pip install urllib3 

以下は、urllib モジュールを使用して Web ページのコンテンツを取得する方法を示す簡単な例です。

  1. 取得する Web ページの URL を定義します。
  2. urllib.request.urlopen() 関数を使用して URL を開いて応答オブジェクトを取得します。
  3. read() メソッドを使用して、応答オブジェクトの内容を読み取ります。
  4. コンテンツはバイトとして返されるため、「utf-8」エンコーディングの decode() メソッドを使用して文字列にデコードします。
  5. 最後に、Web ページの HTML コンテンツを印刷します。
パイソン
import urllib.request # URL of the web page to fetch url = 'https://www.example.com' try: # Open the URL and read its content response = urllib.request.urlopen(url) # Read the content of the response data = response.read() # Decode the data (if it's in bytes) to a string html_content = data.decode('utf-8') # Print the HTML content of the web page print(html_content) except Exception as e: print('Error fetching URL:', e) 

出力

うーん

PyautoGUI

Python の pyautogui モジュールは、開発者がマウスとキーボードを制御してタスクを自動化できるようにするクロスプラットフォーム GUI 自動化ライブラリです。これは Web スクレイピング用に特別に設計されたものではありませんが、Selenium などの他の Web スクレイピング ライブラリと組み合わせて使用​​して、ユーザー入力を必要とする Web ページと対話したり、人間のアクションをシミュレートしたりすることができます。

pip3 install pyautogui 

この例では、pyautogui を使用してスクロールを実行し、Selenium を使用して検索入力フィールドにクエリを入力し、検索ボタンをクリックして得られる検索結果ページのスクリーンショットを取得します。

パイソン
import pyautogui # moves to (519,1060) in 1 sec pyautogui.moveTo(519, 1060, duration = 1) # simulates a click at the present  # mouse position  pyautogui.click() # moves to (1717,352) in 1 sec pyautogui.moveTo(1717, 352, duration = 1) # simulates a click at the present  # mouse position pyautogui.click() 

出力

スケジュール

Python のスケジュール モジュールは、指定した間隔で実行する Python 関数をスケジュールできるシンプルなライブラリです。これは、時間ごと、毎日、毎週など、事前に定義された間隔で Web サイトからデータを定期的にスクレイピングする必要がある場合に、Python での Web スクレイピングで特に役立ちます。

  • 必要なモジュール (スケジュール、時間、リクエスト、および BeautifulSoup ) を bs4 パッケージからインポートします。
  • Webスクレイピングタスクを実行する関数scrape_data()を定義します。この関数内では、Web サイトに GET リクエストを送信し (「https://example.com」をスクレイピングする Web サイトの URL に置き換えます)、BeautifulSoup を使用して HTML コンテンツを解析し、必要なデータを抽出して印刷します。 。
  • Schedule.every().hour.do(scrape_data) を使用して、scrape_data() 関数が 1 時間ごとに実行されるようにスケジュールします。
  • メインループに入ります。このループは、schedule.run_pending() を使用して保留中のスケジュールされたタスクを継続的にチェックし、ループが CPU を過剰に消費するのを防ぐために、反復の間に 1 秒間スリープします。
パイソン
import schedule import time def func(): print('Geeksforgeeks') schedule.every(1).minutes.do(func) while True: schedule.run_pending() time.sleep(1) 

出力

Web スクレイピングに Python3 を使用する理由

Web スクレイピングにおける Python の人気は、いくつかの要因から生じています。

  1. 使いやすさ : Python の簡潔で読みやすい構文により、初心者でもコードを簡単に理解して作成できます。このシンプルさにより、開発プロセスが加速され、Web スクレイピング タスクの学習曲線が短縮されます。
  2. 豊かなエコシステム : Python は、Web スクレイピングに合わせて調整されたライブラリとフレームワークの広大なエコシステムを誇ります。 BeautifulSoup、Scrapy、Requests などのライブラリは HTML の解析プロセスを簡素化し、データ抽出を簡単にします。
  3. 多用途性 : Python は、Web スクレイピングを超えて幅広いタスクに使用できる多用途言語です。その柔軟性により、開発者は Web スクレイピングをデータ分析、機械学習、Web 開発などの大規模なプロジェクトにシームレスに統合できます。
  4. コミュニティサポート : Python には、そのライブラリに貢献し、フォーラム、チュートリアル、ドキュメントを通じてサポートを提供する開発者の大規模で活発なコミュニティがあります。この豊富なリソースにより、開発者は Web スクレイピングの課題に取り組む際に支援やガイダンスに確実にアクセスできます。