zhandaye.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from pyquery import PyQuery as pq
  2. from proxypool.schemas.proxy import Proxy
  3. from proxypool.crawlers.base import BaseCrawler
  4. from loguru import logger
  5. import re
  6. BASE_URL = 'https://www.zdaye.com/dayProxy/{page}.html'
  7. MAX_PAGE = 5
  8. class ZhandayeCrawler(BaseCrawler):
  9. """
  10. zhandaye crawler, https://www.zdaye.com/dayProxy/
  11. """
  12. urls_catalog = [BASE_URL.format(page=page) for page in range(1, MAX_PAGE)]
  13. headers = {
  14. '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'
  15. }
  16. urls = []
  17. ignore = True
  18. def crawl(self):
  19. self.crawl_catalog()
  20. yield from super().crawl()
  21. def crawl_catalog(self):
  22. for url in self.urls_catalog:
  23. logger.info(f'fetching {url}')
  24. html = self.fetch(url, headers=self.headers)
  25. self.parse_catalog(html)
  26. def parse_catalog(self, html):
  27. """
  28. parse html file to get proxies
  29. :return:
  30. """
  31. doc = pq(html)
  32. for item in doc('#J_posts_list .thread_item div div p a').items():
  33. url = 'https://www.zdaye.com' + item.attr('href')
  34. logger.info(f'get detail url: {url}')
  35. self.urls.append(url)
  36. def parse(self, html):
  37. doc = pq(html)
  38. trs = doc('.cont br').items()
  39. for tr in trs:
  40. line = tr[0].tail
  41. match = re.search(r'(\d+\.\d+\.\d+\.\d+):(\d+)', line)
  42. if match:
  43. host = match.group(1)
  44. port = match.group(2)
  45. yield Proxy(host=host, port=port)
  46. if __name__ == '__main__':
  47. crawler = ZhandayeCrawler()
  48. for proxy in crawler.crawl():
  49. print(proxy)