スクレイピングする際このコードを使用しようと考えているのですが、サーバーの負担などを考慮してスクレイピングコードとして何点でしょうか?
改善点をお教えいただけるとありがたいです。
動作環境は GoogleColaboratoryです。
Python
1module_dir = '/content/drive/MyDrive/module' 2data_dir = '/content/drive/MyDrive/input/' 3import os 4import sys 5sys.path.append(module_dir) 6from bs4 import BeautifulSoup 7import re 8import requests 9import time 10import numpy as np 11from datetime import datetime as dt 12from typing_extensions import Protocol 13import json 14import random 15######################################################################################### 16FILE_PATH = '/content/drive/MyDrive/module/ip_list.json' 17USER_AGENT_list = [ 18 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36" 19 ,"Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko; googleweblight) Chrome/38.0.1025.166 Mobile Safari/535.19" 20 ,"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148" 21] 22 23json_open = open(FILE_PATH, 'r') 24proxy_list = json.load(json_open) 25UA = USER_AGENT_list[random.randrange(0, len(USER_AGENT_list), 1)] 26proxy_info = random.choice(proxy_list) 27 28ip = proxy_info['ip'] 29port = proxy_info['port'] 30protocol = proxy_info['protocol'] 31proxy = protocol + '://' + str(ip) + ':' + port 32proxies = { 'http':proxy, 33 'https':proxy} 34headers = {'User-Agent' : UA} 35 36#例のためヤフージャパンをリンクに使用しています 37 url = https://www.yahoo.co.jp 38 site = requests.get(url, proxy, headers=headers, timeout=3.5) 39 time.sleep(random.uniform(0.1**ボールドテキスト**,0.6)) 40 data = BeautifulSoup(site.text,'html.parser')
> サーバーの負担などを考慮してスクレイピングコードとして何点でしょうか?
対象のサイトはスクレイピングが禁止されていないと考えて良いのでしょうか?(USER_AGENT設定しているのは対策ではありませんか?)
はい。禁止されていないサイトでも一応USER_AGENTは設定したほうが良いという情報があったので、設定しております。
設定しないとスクレイピング出来ないサイトはおそらくロボット等による機械的なアクセスを禁止している気がします。(対象サイトが不明なため断言は出来ませんが)
コードについては取得したhtmlを解析するだけなら問題ないと思います。繰り返し処理する場合などは1秒開けるとか必要かもしれません。
ありがとうございます!
回答1件
あなたの回答
tips
プレビュー