| 1234567891011121314151617181920212223242526272829303132 |
- from retrying import retry
- import requests
- from loguru import logger
- from proxypool.setting import GET_TIMEOUT
- class BaseCrawler(object):
- urls = []
-
- @retry(stop_max_attempt_number=3, retry_on_result=lambda x: x is None, wait_fixed=2000)
- def fetch(self, url, **kwargs):
- try:
- kwargs.setdefault('timeout', GET_TIMEOUT)
- kwargs.setdefault('verify', False)
- response = requests.get(url, **kwargs)
- if response.status_code == 200:
- response.encoding = 'utf-8'
- return response.text
- except requests.ConnectionError:
- return
-
- @logger.catch
- def crawl(self):
- """
- crawl main method
- """
- for url in self.urls:
- logger.info(f'fetching {url}')
- html = self.fetch(url)
- for proxy in self.parse(html):
- logger.info(f'fetched proxy {proxy.string()} from {url}')
- yield proxy
|