zhandaye.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. def crawl(self):
  18. self.crawl_catalog()
  19. yield from super().crawl()
  20. def crawl_catalog(self):
  21. for url in self.urls_catalog:
  22. logger.info(f'fetching {url}')
  23. html = self.fetch(url, headers=self.headers)
  24. self.parse_catalog(html)
  25. def parse_catalog(self, html):
  26. """
  27. parse html file to get proxies
  28. :return:
  29. """
  30. doc = pq(html)
  31. for item in doc('#J_posts_list .thread_item div div p a').items():
  32. url = 'https://www.zdaye.com' + item.attr('href')
  33. logger.info(f'get detail url: {url}')
  34. self.urls.append(url)
  35. def parse(self, html):
  36. doc = pq(html)
  37. trs = doc('.cont br').items()
  38. for tr in trs:
  39. line = tr[0].tail
  40. match = re.search(r'(\d+\.\d+\.\d+\.\d+):(\d+)', line)
  41. if match:
  42. host = match.group(1)
  43. port = match.group(2)
  44. yield Proxy(host=host, port=port)
  45. if __name__ == '__main__':
  46. crawler = ZhandayeCrawler()
  47. for proxy in crawler.crawl():
  48. print(proxy)