base.py 984 B

1234567891011121314151617181920212223242526272829303132
  1. from retrying import retry
  2. import requests
  3. from loguru import logger
  4. from proxypool.setting import GET_TIMEOUT
  5. class BaseCrawler(object):
  6. urls = []
  7. @retry(stop_max_attempt_number=3, retry_on_result=lambda x: x is None, wait_fixed=2000)
  8. def fetch(self, url, **kwargs):
  9. try:
  10. kwargs.setdefault('timeout', GET_TIMEOUT)
  11. kwargs.setdefault('verify', False)
  12. response = requests.get(url, **kwargs)
  13. if response.status_code == 200:
  14. response.encoding = 'utf-8'
  15. return response.text
  16. except requests.ConnectionError:
  17. return
  18. @logger.catch
  19. def crawl(self):
  20. """
  21. crawl main method
  22. """
  23. for url in self.urls:
  24. logger.info(f'fetching {url}')
  25. html = self.fetch(url)
  26. for proxy in self.parse(html):
  27. logger.info(f'fetched proxy {proxy.string()} from {url}')
  28. yield proxy