【问题标题】:Python, extract XHR response data from websitePython,从网站中提取 XHR 响应数据
【发布时间】:2018-09-07 19:52:12
【问题描述】:

我正在尝试从https://www.barchart.com/stocks/signals/top-bottom/top?viewName=main 中提取一些数据。

我可以使用 xpath 方法从普通 html 中提取数据,但是我注意到这个网站是从网络获取数据的。

我找到了我想要的数据所在的位置(来自 barchart 网站的表格),如下图所示。

Picture of XHR response

我怎样才能只抓取响应部分?

谢谢!

【问题讨论】:

  • 就我个人而言,如果我是你,我会简单地复制(作为 cUrl)你显示的 api GET 请求,并在你的脚本中使用urllibrequests 发出请求以获取数据。 (注意:您需要将标头(例如 x-xsrf-token)转换为您选择的 http 库)。
  • 你知道我在哪里可以找到一个例子吗?
  • 1.调用 "barchart.com/stocks/signals/top-bottom/top?viewName=main" 2. 提取 Set-Cookie 3. 调用带有标题的 "barchart.com/proxies/core-api/v1/quotes/get..." (cookie: value from Set-Cookie, x-xsrf-token: urldecoded XSRF-TOKEN from Set-Cookie)

标签: python ajax web-scraping scrapy xmlhttprequest


【解决方案1】:

试试这个代码。

from urllib import urlencode

headers = {
    'cookie': 'XSRF-TOKEN=eyJpdiI6Ikk4cFdwcGlqMVVPRHM4MFc5Vk1ROWc9PSIsInZhbHVlIjoiUHRHbjZwSTZFTUkrTFRNZVJXczZsV2xZZnN1WEhmM1puakN5WWFsM0RUODhJRUZJYVA3XC9GZ1QyOUR5R0VqaXRmdDJIR0wyV2lBdXlFcTlxXC9HWFVqZz09IiwibWFjIjoiNTlkODY2MGM0YzJlZDQxMTI5ZmIwMmE0NWI5YzkzY2Q4NDg3MjhiODg4NDAxN2Q5NmYzYTE3MmUxZWQzZjk4MiJ9; laravel_session=eyJpdiI6ImFob1k3NWw1U2pBcWhKU3JLdEpDQkE9PSIsInZhbHVlIjoidnNNcXpKSHRmQkYyMGp2NTF4eUhTVVwvSmtidnAwMDV5eGdUWWVhZ2syTUlXaVdQV1JEUldYcG5lXC9mdUtnRkl2akNMR2ZKMkY2NFlWYTFOM2NPRm1uQT09IiwibWFjIjoiYTJhODkwMTJjZjI3NzJiOTE1YWY5MWJkYTNiYTNlMjZjNjI1YjgzZmJlYzhkMTU4Mjk1OWQ5MWEzMGU5OTM5NSJ9; _ga=GA1.2.674295962.1536391451; _gid=GA1.2.1388999250.1536391451; _gat_UA-2009749-51=1; Markets09122018PageView=1; Markets09122018WebinarClosed=true',
    'dnt': '1',
    'x-xsrf-token': 'eyJpdiI6Ikk4cFdwcGlqMVVPRHM4MFc5Vk1ROWc9PSIsInZhbHVlIjoiUHRHbjZwSTZFTUkrTFRNZVJXczZsV2xZZnN1WEhmM1puakN5WWFsM0RUODhJRUZJYVA3XC9GZ1QyOUR5R0VqaXRmdDJIR0wyV2lBdXlFcTlxXC9HWFVqZz09IiwibWFjIjoiNTlkODY2MGM0YzJlZDQxMTI5ZmIwMmE0NWI5YzkzY2Q4NDg3MjhiODg4NDAxN2Q5NmYzYTE3MmUxZWQzZjk4MiJ9',
    'accept-language': 'en-US,en;q=0.9',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36',
    'accept': 'application/json',
    'referer': 'https://www.barchart.com/stocks/signals/top-bottom/top?viewName=main',
    'authority': 'www.barchart.com',
    'accept-encoding': 'gzip, deflate, br',
}

params = (
    'lists': 'stocks.signals.top.current.us',
    'orderDir': 'asc',
    'fields': 'symbol,symbolName,lastPrice,priceChange,percentChange,opinion,opinionPrevious,opinionLastWeek,opinionLastMonth,symbolCode,symbolType,hasOptions',
    'meta': 'field.shortName,field.type,field.description',
    'hasOptions': 'true',
    'page': '1',
    'limit': '100',
    'raw': '1',
)

yield Request('https://www.barchart.com/proxies/core-api/v1/quotes/get?' + urlencode(params) , headers=headers)

【讨论】:

  • 嘿,Umair。我将此添加到我的代码中。我的参数有语法错误,所以我把它改成了字典(使用大括号)。代码运行了,但我没有得到任何打印出来的东西。我怎样才能打印出参数呢?代码对你有用吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
相关资源
最近更新 更多