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() をループの中に入れたら意味がないので注意してください。

おすすめ記事

Omni chat google extension 作成しました
Omni chat google extension 作成しました
to_excelでxlsx,xlsファイルを書き込む / Python Pandas
to_excelでxlsx,xlsファイルを書き込む / Python Pandas
Django テンプレート 使用 #3 List Dictの表示
Django テンプレート 使用 #3 List Dictの表示
数値による条件抽出 - Python Pandas
数値による条件抽出 - Python Pandas
気象庁 台風位置表 をpython foliumで可視化する
気象庁 台風位置表 をpython foliumで可視化する
eTrex 10JのGPSログをPythonで効率的に保存する
eTrex 10JのGPSログをPythonで効率的に保存する
Supponsered

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

Comments

comments powered by Disqus