python 无法让脚本生成模仿Chrome开发工具后的XHR请求的JSON响应

cyej8jka  于 2024-01-05  发布在  Python
关注(0)|答案(1)|浏览(170)

当我在Chrome浏览器中打开这个link,将光标悬停在位于左上角的Stocks上,并从Most Active类别中选择Trading Liquidity时,我可以看到所需的数据显示在该页面上。
我尝试使用下面的脚本来复制我在Chrome开发工具中看到的XHR查询,但结果是status_code 400。

  1. import requests
  2. url = 'https://www.barchart.com/proxies/core-api/v1/quotes/get'
  3. link = 'https://www.barchart.com/stocks/most-active/daily-volume-leaders'
  4. headers = {
  5. 'Accept': 'application/json',
  6. 'Accept-Encoding': 'gzip, deflate, br',
  7. 'Accept-Language': 'en-US,en;q=0.5',
  8. 'Host': 'www.barchart.com',
  9. 'Referer': 'https://www.barchart.com/stocks/most-active/trading-liquidity',
  10. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0',
  11. }
  12. params = {
  13. 'lists': 'stocks.us.trading_liquidity.advances.overall',
  14. 'orderDir': 'desc',
  15. 'fields': 'symbol,symbolName,lastPrice,priceChange,percentChange,averageVolume100d,sharesOutstanding,tradingRatio,tradeTime,symbolCode,symbolType,hasOptions',
  16. 'orderBy': 'tradingRatio',
  17. 'meta': 'field.shortName,field.type,field.description,lists.lastUpdate',
  18. 'hasOptions': 'true',
  19. 'page': '1',
  20. 'limit': '100',
  21. 'raw': '1',
  22. }
  23. with requests.Session() as s:
  24. s.headers.update(headers)
  25. res = s.get(link)
  26. s.headers['X-Xsrf-Token'] = res.cookies['XSRF-TOKEN']
  27. resp = s.get(url)
  28. print(resp.status_code)
  29. print(resp.json())

字符串
如何让脚本生成JSON响应?

ubby3x7f

ubby3x7f1#

问得好,我需要做些调查。
cookie没有正确编码,因此您需要unquote它们:

  1. from urllib.parse import unquote

字符串
然后:

  1. s.headers['X-XSRF-Token'] = unquote(res.cookies['XSRF-TOKEN'])


使用您的代码:

  1. import requests
  2. from urllib.parse import unquote
  3. url = 'https://www.barchart.com/proxies/core-api/v1/quotes/get'
  4. link = 'https://www.barchart.com/stocks/most-active/daily-volume-leaders'
  5. headers = {
  6. 'Accept': 'application/json',
  7. 'Accept-Encoding': 'gzip, deflate, br',
  8. 'Accept-Language': 'en-US,en;q=0.5',
  9. 'Host': 'www.barchart.com',
  10. 'Referer': 'https://www.barchart.com/stocks/most-active/trading-liquidity',
  11. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0',
  12. }
  13. params = {
  14. 'lists': 'stocks.us.trading_liquidity.advances.overall',
  15. 'orderDir': 'desc',
  16. 'fields': 'symbol,symbolName,lastPrice,priceChange,percentChange,averageVolume100d,sharesOutstanding,tradingRatio,tradeTime,symbolCode,symbolType,hasOptions',
  17. 'orderBy': 'tradingRatio',
  18. 'meta': 'field.shortName,field.type,field.description,lists.lastUpdate',
  19. 'hasOptions': 'true',
  20. 'page': '1',
  21. 'limit': '100',
  22. 'raw': '1',
  23. }
  24. with requests.Session() as s:
  25. s.headers.update(headers)
  26. res = s.get(link)
  27. s.headers['X-XSRF-Token'] = unquote(res.cookies['XSRF-TOKEN'])
  28. resp = s.get(url, params=params)
  29. print(resp.status_code)
  30. print(resp.json())

展开查看全部

相关问题