LoginSignup
Reik
@Reik

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Python スクレイピング

解決したいこと

スクレイピングする際このコードを使用しようと考えているのですが、サーバーの負担などを考慮してスクレイピングコードとして何点でしょうか?
改善点をお教えいただけるとありがたいです。

動作環境は GoogleColaboratoryです。

該当するソースコード

```言語名 Python
module_dir = '/content/drive/MyDrive/module'
data_dir = '/content/drive/MyDrive/input/'
import os
import sys
sys.path.append(module_dir)
from bs4 import BeautifulSoup
import re
import requests
import time
import numpy as np
from datetime import datetime as dt
from typing_extensions import Protocol
import json
import random

FILE_PATH = '/content/drive/MyDrive/module/ip_list.json'
USER_AGENT_list = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36"
,"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"
,"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"
]

json_open = open(FILE_PATH, 'r')
proxy_list = json.load(json_open)
UA = USER_AGENT_list[random.randrange(0, len(USER_AGENT_list), 1)]
proxy_info = random.choice(proxy_list)

ip = proxy_info['ip']
port = proxy_info['port']
protocol = proxy_info['protocol']
proxy = protocol + '://' + str(ip) + ':' + port
proxies = { 'http':proxy,
'https':proxy}
headers = {'User-Agent' : UA}

#例のためヤフージャパンをリンクに使用しています
url = https://www.yahoo.co.jp
site = requests.get(url, proxy, headers=headers, timeout=3.5)
time.sleep(random.uniform(0.1,0.6))
data = BeautifulSoup(site.text,'html.parser')
```

自分で試したこと

確認くんで確認した結果はユーザーエージェント、プロキシが不定であった。

0

自分ならリトライの項とプロキシの死活チェック、複数スレッドでプロキシがダブらないような仕組みを入れると思う。
件数にもよりますが。

0

sleep時間が短いように気がします。
最低でも1アクセス/秒くらい待ったほうが迷惑かけないかと。
https://ja.wikipedia.org/wiki/%E5%B2%A1%E5%B4%8E%E5%B8%82%E7%AB%8B%E4%B8%AD%E5%A4%AE%E5%9B%B3%E6%9B%B8%E9%A4%A8%E4%BA%8B%E4%BB%B6

0
This answer has been deleted for violation of our Terms of Service.

Your answer might help someone💌