【Python】簡単クローリング
今回はPythonにより最低限のモジュールでクローリングをしていきます。
使用するモジュール
import requests import os from time import sleep
クローリングで対象ページをhtmlファイルとして取得し、取得したhtmlファイルに対してスクレイピングをしていきます。今回はクローリング部分について書いていきます。 青丸で囲ったカテゴリーごとに指定したページ数分のHTMLを取得し、最終的には記事タイトルと記事のカテゴリーを収集することを目指します。
クローラー作成の手順
- 各カテゴリーのページのURLがどのようになっているのかを確認する。
経済・政治 : https://www.nikkei.com/economy/archive/
ビジネス : https://www.nikkei.com/business/archive/
テクノロジー : https://www.nikkei.com/technology/archive/
国際・アジア : https://www.nikkei.com/international/archive/
上の4つのURLを確認すると以下の部分が共通していることがわかります。 "https://www.nikkei.com/‥‥/archive/" - ページごとのURLがどのようになっているのかを確認する。
経済・政治のページで1ページ目、2ページ目、3ページ目のURLがどのように変化しているのかを確認する。
1ページ目 : https://www.nikkei.com/economy/archive/(https://www.nikkei.com/economy/archive/?bn=01でも同ページが表示される)
2ページ目 : https://www.nikkei.com/economy/archive/?bn=11
3ページ目 : https://www.nikkei.com/economy/archive/?bn=21
?bn=
に続く数字を変えていけば各ページのHTMLを取得することができそうです。
クローリングの実装
# htmlを格納するディレクトリを作成 file_path = 'nikkei' if not os.path.exists(file_path): os.makedirs(file_path) # 共通URL url_org = 'https://www.nikkei.com' # 政治・経済/ビジネス/テクノロジー/国際・アジア archive_list = ['economy', 'business', 'technology', 'international'] page = 0 for archive in archive_list: for _ in range(3): response = requests.get(url_org + '/' + archive + '/' + 'archive/' + \ '?bn=' + str(page) + '1') response.encoding = response.apparent_encoding # nikkeiディレクトリにpage〇.htmlで保存 with open(os.path.join('nikkei', 'page' + str(page + 1) + '.html'), 'w', \ encoding = 'utf-8') as f: f.write(response.text) page = page + 1 sleep(1)
if not os.path.exists(file_path):
file_path(ディレクトリ名)同名のディレクトリが存在しないとき。os.makedirs(file_path)
<file_path>ディレクトリを作成する。for archive in archive_list:
でカテゴリーごとにfor文を回す。for _ in range(3):
カテゴリーごとに3ページずつ取得requests.get(url_org + '/' + archive + '/' + 'archive/' + '?bn=' + str(page) + '1')
でカテゴリー、ページごとのURLのHTMLを取得する。response.encoding = response.apparent_encoding
で極力文字化けが起こらないようにできる。
取得したhtmlを最初に作成したnikkeiディレクトリにpage〇.htmlで保存する。
4カテゴリー3ページずつHTMLファイルが保存されている。
まとめ
webページのURLがどのように構成されているかを確認することができればこのようなページ移動のみで達成できるものであれば簡単につくることができます。
次回は取得したHTMLをスクレイピングして記事タイトル等を取得していきます。