| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- from pyquery import PyQuery as pq
- from proxypool.schemas.proxy import Proxy
- from proxypool.crawlers.base import BaseCrawler
- from loguru import logger
- import re
- BASE_URL = 'https://www.zdaye.com/dayProxy/{page}.html'
- MAX_PAGE = 5
- class ZhandayeCrawler(BaseCrawler):
- """
- zhandaye crawler, https://www.zdaye.com/dayProxy/
- """
- urls_catalog = [BASE_URL.format(page=page) for page in range(1, MAX_PAGE)]
- headers = {
- 'User-Agent': 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'
- }
- urls = []
- ignore = True
- def crawl(self):
- self.crawl_catalog()
- yield from super().crawl()
- def crawl_catalog(self):
- for url in self.urls_catalog:
- logger.info(f'fetching {url}')
- html = self.fetch(url, headers=self.headers)
- self.parse_catalog(html)
- def parse_catalog(self, html):
- """
- parse html file to get proxies
- :return:
- """
- doc = pq(html)
- for item in doc('#J_posts_list .thread_item div div p a').items():
- url = 'https://www.zdaye.com' + item.attr('href')
- logger.info(f'get detail url: {url}')
- self.urls.append(url)
- def parse(self, html):
- doc = pq(html)
- trs = doc('.cont br').items()
- for tr in trs:
- line = tr[0].tail
- match = re.search(r'(\d+\.\d+\.\d+\.\d+):(\d+)', line)
- if match:
- host = match.group(1)
- port = match.group(2)
- yield Proxy(host=host, port=port)
- if __name__ == '__main__':
- crawler = ZhandayeCrawler()
- for proxy in crawler.crawl():
- print(proxy)
|