utils.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on 2024-12-25
  4. ---------
  5. @summary:
  6. ---------
  7. @author: Dzr
  8. """
  9. import execjs
  10. import requests
  11. import json
  12. def ctx():
  13. with open('./zgsyzbtbw_pm.js', 'r', encoding='utf-8') as fr:
  14. ex_js = fr.read()
  15. return execjs.compile(ex_js)
  16. def get_logo(t, proxies=False):
  17. headers = {
  18. "Accept": "application/json, text/plain, */*",
  19. "Accept-Language": "zh-CN,zh;q=0.9",
  20. "Cache-Control": "no-cache",
  21. "Connection": "keep-alive",
  22. "MACHINE_CODE": t,
  23. "Pragma": "no-cache",
  24. "Referer": "https://www.cnpcbidding.com/",
  25. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
  26. }
  27. url = "https://www.cnpcbidding.com/cms/css/bj.css"
  28. res = requests.get(url, headers=headers, proxies=proxies, timeout=20)
  29. return res.content.decode()
  30. def parse_item_list(request, response):
  31. ret = response.content.decode()
  32. data = (json.loads(ret)['data'] if 'data' in ret else ret).replace('"', '')
  33. data_dict = ctx().call('decrypt', request.logo['logo2'], data)
  34. if data_dict is None:
  35. raise ValueError(f'列表页下载失败|{request.page}')
  36. return data_dict.get('data').get('records') or []