Pythonは、ウェブスクレイピング(Web Scraping)を行うための非常に強力な言語です。ウェブスクレイピングは、インターネット上のデータを自動的に収集することを指します。この記事では、Pythonを使用してウェブスクレイピングを行う方法について説明します。
BeautifulSoupを使用してウェブページを解析する
BeautifulSoupは、Pythonで一般的に使用されるウェブスクレイピングライブラリです。BeautifulSoupを使用すると、ウェブページからHTML要素を解析し、必要な情報を収集できます。
from bs4 import BeautifulSoup
import requests
url = 'https://www.example.com/'
html = requests.get(url).text
soup = BeautifulSoup(html, 'html.parser')
ここでは、BeautifulSoupを使用して、URLで指定されたウェブページを取得し、HTML要素を解析しています。requests.get
メソッドを使用して、URLからHTMLを取得し、BeautifulSoup
関数を使用してHTMLを解析します。
BeautifulSoupについては別記事に使い方をまとめていますので、よかったら見てください。
HTML要素を取得する
BeautifulSoupを使用すると、HTML要素を取得することができます。たとえば、タイトル要素を取得するには、次のようにします。
title = soup.title.string
print(title)
これにより、ウェブページのタイトルが取得され、表示されます。
複数のHTML要素を取得する
複数のHTML要素を取得するには、find_all
メソッドを使用します。たとえば、すべてのリンク要素を取得するには、次のようにします。
links = soup.find_all('a')
for link in links:
print(link.get('href'))
これにより、ウェブページ内のすべてのリンクが取得され、表示されます。
findall/findを利用した要素取得については下記ページにまとめています。よかったら見てください。
また、要素取得方法としてCSSセレクターを利用する方法もあります。CSSセレクターの利用については下記ページにまとめていますので、よかったら見てください。
データをCSVファイルに書き込む
ウェブスクレイピングで収集したデータをCSVファイルに書き込むには、csv
モジュールを使用します。たとえば、ウェブページ内のすべてのリンクをCSVファイルに書き込むには、次のようにします。
import csv
links = soup.find_all('a')
with open('links.csv', 'w') as file:
writer = csv.writer(file)
writer.writerow(['Link'])
for link in links:
writer.writerow([link.get('href')])
これにより、links.csv
という名前のCSVファイルが作成され、すべてのリンクが1つの列に書き込まれます。
以上が、Pythonを使用してウェブスクレイピングを行う方法の概要です。この記事で説明した技術を基に、より複雑なウェブスクレイピングの例を示します。
検索エンジンから検索結果を取得する
検索エンジンから検索結果を取得するには、requests
モジュールを使用して検索結果ページのHTMLを取得し、BeautifulSoup
を使用して解析します。
query = 'Python web scraping'
url = f'https://www.google.com/search?q={query}'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
html = requests.get(url, headers=headers).text
soup = BeautifulSoup(html, 'html.parser')
ここでは、Googleで「Python web scraping」というクエリを検索し、検索結果ページのHTMLを取得しています。requests.get
メソッドにヘッダーを指定して、Webブラウザーからのリクエストであるという印象を与えることができます。
検索結果のタイトルとURLを取得する
Google検索結果ページからタイトルとURLを取得するには、以下のようにします。
results = soup.find_all('div', {'class': 'g'})
for result in results:
title = result.find('h3').text
url = result.find('a')['href']
print(f'{title} - {url}')
これにより、検索結果ページからタイトルとURLが取得され、表示されます。
Seleniumを使用してJavaScriptが実行されたウェブページから情報を取得する
Seleniumを使用すると、JavaScriptが実行されたウェブページから情報を取得できます。たとえば、ウェブページがJavaScriptを使用して動的に生成される場合、Seleniumを使用してページをロードし、必要な情報を取得できます。
from selenium import webdriver
driver = webdriver.Chrome()
url = 'https://www.example.com/'
driver.get(url)
title = driver.find_element_by_tag_name('h1').text
print(title)
driver.quit()
ここでは、Chromeを使用してウェブページをロードし、find_element_by_tag_name
メソッドを使用してHTML要素を取得しています。quit
メソッドを使用して、Chromeドライバーをクローズします。
まとめ
以上が、Pythonを使用してより複雑なウェブスクレイピングを行う方法の概要です。注意点として、ウェブスクレイピングには利用規約違反があるため、使用する前にサイトの利用規約を確認し、違反しないようにすることが重要です。