zhandaye.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. BASE_URL = 'https://www.zdaye.com/dayProxy/{page}.html'
  6. MAX_PAGE = 5
  7. class ZhandayeCrawler(BaseCrawler):
  8. """
  9. zhandaye crawler, https://www.zdaye.com/dayProxy/
  10. """
  11. urls = [BASE_URL.format(page=page) for page in range(1, MAX_PAGE)]
  12. headers = {
  13. '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'
  14. }
  15. def crawl(self):
  16. for url in self.urls:
  17. logger.info(f'fetching {url}')
  18. html = self.fetch(url, headers=self.headers)
  19. self.parse(html)
  20. def parse(self, html):
  21. """
  22. parse html file to get proxies
  23. :return:
  24. """
  25. doc = pq(html)
  26. for item in doc('#J_posts_list .thread_item div div p a').items():
  27. post = 'https://www.zdaye.com' + item.attr('href')
  28. logger.info(f'get detail url: {post}')
  29. ZhandayeDetailCrawler(post).crawl()
  30. class ZhandayeDetailCrawler(BaseCrawler):
  31. urls = []
  32. ignore = True
  33. def __init__(self, url):
  34. self.urls.append(url)
  35. super().__init__()
  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. host = line.split(':')[0]
  42. port = line.split(':')[1][:4]
  43. yield Proxy(host=host, port=port)
  44. if __name__ == '__main__':
  45. crawler = ZhandayeCrawler()
  46. for proxy in crawler.crawl():
  47. print(proxy)