Pythonで比較的安全にScrapingするClass

 

{{DZ_TITLE}}
Scrapingする際に、気を付けないといけないと相手からブロックされてしまったり、相手のサーバーをダウンさせてしまったりしかねません。
簡単なものですが、極力そうならないようにするためのClassを作りました。

コンセプト

  • 相手のサーバーに負荷をかけすぎない
    複数回Scrapingする際には、Sleepを自動で入れる様にする。
  • あからさまに機械が実施していると判らないように時間をあけて実行する
    Scraping時間をランダムに実施可能に
  • とは言え最初の一回目はすぐに処理したい
    最初の1回目はSleepはいれない

とものすごく簡単なものですが…

プログラム

import time
import random
import requests
from bs4 import BeautifulSoup

class Scraping:
    def __init__(self, base_sec=30, extend_sec=90,display=False):
        self.last_time  = time.time() - 1000
        self.base_sec   = base_sec
        self.extend_sec = extend_sec
        self.display    = display

    def scraping(self,url, base_sec=None, extend_sec=None, display=None):
        if base_sec is None:
            base_sec = self.base_sec
        if extend_sec is None:
            extend_sec = self.extend_sec
        if display is None:
            display = self.display

        next_time = self.last_time + base_sec + random.randint(0,extend_sec)

        while next_time > time.time():
            if display:
                print('*',end='')
            time.sleep(1)
        if display:
            print('')
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}
        response = requests.get(url, headers=headers)
        response.encoding = response.apparent_encoding
        soup = BeautifulSoup(response.text, 'html.parser')
        self.last_time = time.time()
        return soup

使い方

url_lst = [....] # URLを列挙してください

scraping = Scraping()
for url in url_lst:
  soup = scraping.scraping(url)
  ...

scraping =Scraping() をループの中に入れたら意味がないので注意してください。

おすすめ記事

COVID-19のRNA/DNAのチェック
COVID-19のRNA/DNAのチェック
JavaScript
JavaScript
JSONの書込み、読込 等 - Python徹底解説
JSONの書込み、読込 等 - Python徹底解説
Django 目次 - Python
Django 目次 - Python
日時処理 / Python Pandas
日時処理 / Python Pandas
プログラムは独学が良いか、スクールが良いか?【無償カウンセリング、無料体験あり】
プログラムは独学が良いか、スクールが良いか?【無償カウンセリング、無料体験あり】
Supponsered

外部サイト
↓プログラムを学んでみたい場合、学習コースなどもおすすめです!

Comments

comments powered by Disqus