こんにちは。toruです。
今回はpythonでスクレイピングを実装していきます。
おそらくこのサイトに行き着いた方はスクレピングについてご周知の方だと思うので新たにここでは説明しません。
もし、スクレイピングについて知りたい方は以下のサイトを参照してからお進みください。
それでは早速いきましょう!
スクレイピングで取得したデータを公開・複製および販売することは著作権法違反により罰せられる可能性があります。使用する際は解析・個人観賞用途のみの目的で使用してください。
また、スクレイピングは対象のWebサイトのサーバーに大きな負荷をかけます。今回紹介したスクリプトを複数台のPCで同時に使用することは禁じます。もしそれにより偽計業務妨害罪などで訴えられても当サイトおよび管理者は一切の責任を負いかねます。全て自己責任でお願いします。
【忙しい方向け】紹介するプログラム
今回紹介するプログラムは以下の通り。お急ぎの方はコピペして使用してください。
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | # -*- coding: utf-8 -*- # urlを読み込むためrequestsをインポート import requests # htmlを読み込むためBeautifulSoupをインポート from bs4 import BeautifulSoup from requests.compat import urljoin import urllib3 from urllib3.exceptions import InsecureRequestWarning import datetime import time import os from time import sleep urllib3.disable_warnings(InsecureRequestWarning) def into_dir(): dt_now = datetime.datetime.now() date = str(dt_now.year) + str(dt_now.month) + \ str(dt_now.day) + str(dt_now.hour) + str(dt_now.minute) return dt_now, date def scraping(url, output_dir): # 画像リストの配列 images = [] _, date = into_dir() #dt_now = datetime.datetime.now() #date = str(dt_now.year) + str(dt_now.month) + str(dt_now.day) + str(dt_now.hour) + str(dt_now.minute) cnt = 0 prc = ['/', '-', '\\', '|'] # bsでURL内を解析 soup = BeautifulSoup(requests.get(url, verify=False).content,'lxml') # imgタグを取得しlinkに格納 for link in soup.find_all("img"): # imgタグ内の.jpgであるsrcタグを取得 if link.get("src") and link.get("src").endswith(".jpg"): # imagesリストに格納 images.append(urljoin(url, link.get("src"))) # imgタグ内の.jpegであるsrcタグを取得 elif link.get("src") and link.get("src").endswith(".jpeg"): # imagesリストに格納 images.append(urljoin(url, link.get("src"))) # imgタグ内の.pngであるsrcタグを取得 elif link.get("src") and link.get("src").endswith(".png"): # imagesリストに格納 images.append(urljoin(url, link.get("src"))) # imgタグ内の.gifであるsrcタグを取得 elif link.get("src") and link.get("src").endswith(".gif"): # imagesリストに格納 images.append(urljoin(url, link.get("src"))) # imgタグ内の.mp4であるsrcタグを取得 elif link.get("src") and link.get("src").endswith(".mp4"): # imagesリストに格納 images.append(urljoin(url, link.get("src"))) else : continue l = len(images) for i, image in enumerate(images): re = requests.get(image, verify=False) i += 1 cnt += 1 print("\rSaving Image...{} ({} / {})".format(prc[cnt % 4], \ cnt, (int(l))), end='') with open(output_dir + f'{i}' + "{0}.".format(date) + image.split('.')[-1], 'wb') as f: f.write(re.content) sleep(1) def main(): _, date = into_dir() cnt = 1 os.makedirs('./data/{}'.format(date), exist_ok=True) output_dir = './data/{}/'.format(date) URL = [] f = open('scraping_url.txt', 'r') URL = f.readlines() # URL入力 #URL = [""] for url in URL: # プロセス時間計測開始 start_time = time.time() print("\n({0}/{1})Start".format(cnt, len(URL))) # スクレイピング scraping(url, output_dir) # 学習にかかった時間を計算 finish_time = time.time() print("\nok!\nProcessing time => {0:.0f} min {1:.2f} sec".format((finish_time - start_time)/60, (finish_time - start_time)%60)) cnt += 1 if __name__ == "__main__": main() |
スクレイピングしたいサイトのURLは「scraping_url.txt」を作成し記述してください。
【急いでない方向け】まずは必要なライブラリをインストール
まずは、必要なライブラリをインストールしていきます。新たにインストールが必要なライブラリは以下の通りです。
- requests
- BeautifulSoup
- urllib3
そして、これらのインストール方法は以下の通り。
1 2 3 | python -m pip install --user requests python -m pip install --user bs4 python -m pip install --user urllib3 |
もしかしたら、次のようなエラーがでるかもしれません。
1 | bs4.FeatureNotFound: Couldn’t find a tree builder with the features you requested: lxml. Do you need to install a parser library? |
もし、これが出たら次のライブラリをインストールしてください。
1 | python -m pip install --user lxml |
実行結果
では、実際に実行してみましょう。
まずは、scraping_url.txtというテキストファイルを作成し、画像収集したいサイトのURLを書き込んで保存してください。

そうしたら、先述しているプログラムを実行してください。
短時間に多くのリクエストをサーバに送ると遮断される可能性があります。
プログラム内の72行目「sleep(1)」は必ず入れるようにしてください。
すると、以下のように自動でフォルダが作成され、その中に画像が保存されています。

これで完了です。もちろんURLは複数個入力してもすべて収集されます。試してみてください。
最後に
今回はpythonでスクレイピングをする方法について書きました。
このサイトではこれ以外にも作業効率を向上させるようなソースコードや環境設定などを初心者でもわかりやすく説明していきます。
興味がある方は他の記事もご覧になってみてください。
それでは、ばい
