このブログではPythonを使ったスクレイピングを、初心者向けにサンプルコード付きで解説しています。以下に紹介する記事では、①から⑨のステップでスクレイピングの方法を学び、実践に役立てられるよう体系的にまとめています。
【①〜⑨まとめ】PythonでWebスクレイピングを実践する方法【サンプルコード付き】
このブログではPythonスクレイピングを初心者向けに解説していきます。順番に各記事で解説しており入門者向けです。サンプルコード付きで解説するので実践的…
この記事ではPythonスクレイピングで取得したデータをCSVファイルに書き出す方法について解説していきます。
スクレイピングの基本や、データの整形方法などについては以下の記事で解説しています。
①【Requests】BeautifulSoupを使ったスクレイピングの基本を解説【サンプルコード】
このブログではPythonを使ったスクレイピングを、初心者向けにサンプルコード付きで解説しています。以下に紹介する記事では、①から⑨のステップでスクレイピ…
⑧Pythonでスクレイピングしたデータを整形する方法
このブログではPythonを使ったスクレイピングを、初心者向けにサンプルコード付きで解説しています。以下に紹介する記事では、①から⑨のステップでスクレイピ…
サンプルコード全文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
import requests from bs4 import BeautifulSoup from urllib.parse import urljoin import os import csv #指定ページから各リンクを見つける def find_links(): url = 'https://scraping-training.vercel.app/site?postCount=20&title=%E3%81%93%E3%82%8C%E3%81%AF{no}%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%A7%E3%81%99&dateFormat=YYYY-MM-DD&isTime=true&timeFormat=&isImage=true&interval=360&isAgo=true&countPerPage=0&page=1&robots=true&' webpage_response = requests.get(url) webpage_content = webpage_response.content webpage_soup = BeautifulSoup(webpage_content, "html.parser") base_url = 'https://scraping-training.vercel.app' links = [] count = 0 a_tags = webpage_soup.select(".post-link") if a_tags: for a_tag in a_tags: href = a_tag.get('href') href = urljoin(base_url, href) title_div = a_tag.select_one(".post-title").text.strip() # 辞書に格納 data_dict = {"id": count, "記事タイトル": title_div, "url": href} links.append(data_dict) count += 1 return links # 関数を実行し、戻り値を受け取る links = find_links() save_directory = '/sample_folder' csv_filename = 'links.csv' filepath = os.path.join(save_directory, csv_filename) # ファイルがすでに存在する場合は関数をスキップする if os.path.exists(filepath): print("CSVファイルがすでに存在します:", filepath) else: # ディレクトリが存在しない場合は作成する os.makedirs(save_directory, exist_ok=True) # リンクをCSVに保存 with open(filepath, 'w', newline='', encoding='utf-8') as csvfile: writer = csv.writer(csvfile) writer.writerow(["id", "記事タイトル", "url"]) # ヘッダーを書き込む for link in links: writer.writerow([link["id"], link["記事タイトル"], link["url"]]) print("メーカーリンクをCSVに保存しました:", filepath) |
以下、解説していきます。
コードの解説
関数を実行し、戻り値を受け取る
1 |
links = find_links() |
find_links() 関数を実行して、リンクデータを取得します。この関数は、リンク(記事のタイトルやURL)を含む辞書形式のデータリストを返します。結果は links というリストに格納されます。
保存先を指定
1 2 3 |
save_directory = '/sample_folder' csv_filename = 'links.csv' filepath = os.path.join(save_directory, csv_filename) |
・save_directory には、保存先のディレクトリを指定しています。
・csv_filename は保存するファイル名です。
・os.path.join(save_directory, csv_filename) を使って、ディレクトリとファイル名を組み合わせたフルパスを生成し、filepath に格納します。これで保存するファイルの完全なパスが得られます。
ファイルの存在チェック
1 2 3 4 5 |
if os.path.exists(filepath): print("CSVファイルがすでに存在します:", filepath) else: # ディレクトリが存在しない場合は作成する os.makedirs(save_directory, exist_ok=True) |
・os.path.exists(filepath) を使って、指定した filepathが既に存在するかどうかを確認します。
・ファイルが存在する場合は、”CSVファイルがすでに存在します” というメッセージを出力して処理を終了します。これにより、無駄な上書きやファイル作成を避けることができます。
・os.makedirs(save_directory, exist_ok=True) を使って、指定したディレクトリ(save_directory)が存在しない場合に作成します。exist_ok=True は、既にディレクトリが存在する場合はエラーを発生させないための設定です。
CSVに保存する
1 2 3 4 5 6 7 |
with open(filepath, 'w', newline='', encoding='utf-8') as csvfile: writer = csv.writer(csvfile) writer.writerow(["id", "記事タイトル", "url"]) # ヘッダーを書き込む for link in links: writer.writerow([link["id"], link["記事タイトル"], link["url"]]) print("メーカーリンクをCSVに保存しました:", filepath) |
・open(filepath, ‘w’, newline=”, encoding=’utf-8′) を使って、CSVファイルを「書き込みモード」で開きます。’w’ は書き込みモードを意味し、encoding=’utf-8′ でファイルの文字コードをUTF-8に指定しています。
・csv.writer(csvfile) でCSVファイルに書き込むためのライターオブジェクトを作成します。
・writer.writerow([“id”, “記事タイトル”, “url”]) は、CSVファイルのヘッダー(列の名前)を1行目に書き込みます。この場合、”id”、”記事タイトル”、”url” という3つの列を作成します。
・for link in links: のループ内では、links の各要素(辞書形式)に対して writer.writerow([link[“id”], link[“記事タイトル”], link[“url”]]) を実行し、それぞれのリンク情報をCSVファイルに1行ずつ書き込みます。
このようにして、スクレイピングしたデータをCSVファイルに書き込んでいます。
CSVファイルをMySQLデータベースにインポートする方法は以下の記事で解説しています。
PythonスクレイピングしたデータをMySQLデータベースにインポートする方法を解説
この記事ではPythonでスクレイピングしたデータをMySQLデータベースにインポートする方法を解説しています。 Pythonウェブスクレイピングの基本についてはこ…