| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- import random
- from retrying import retry
- import requests
- from loguru import logger
- from proxypool.setting import GET_TIMEOUT
- class BaseCrawler(object):
- urls = []
- @property
- def user_agent(self):
- """
- return an User-Agent at random
- :return:
- """
- ua_list = [
- 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101',
- 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122',
- 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71',
- 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95',
- 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71',
- 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)',
- 'Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50',
- 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',
- ]
- return random.choice(ua_list)
- @property
- def header(self):
- """
- basic header
- :return:
- """
- return {'User-Agent': self.user_agent,
- 'Accept': '*/*',
- 'Connection': 'keep-alive',
- 'Accept-Language': 'zh-CN,zh;q=0.8'}
- @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,headers=self.header, **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
|