我使用请求库创建了一个脚本,以获取网页中可用的表格内容。当我使用这个link手动访问该站点时,我会看到一个页面,我需要首先点击AGREE
按钮才能看到表格内容
这也是website link
我试图在chrome开发工具的网络部分仔细观察,并使用下面的脚本来访问内容。然而,我得到的只是以下内容,而根据开发工具,我应该得到一些json格式的表格内容
我得到的输出:
b'\n\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\n\n\n{}'
预期输出(截断):
{T:{"Columns":[{"tradeQuantity":"1125000","quantityAsString":"1125000",
我试过:
import json
import requests
start_url = 'https://finra-markets.morningstar.com/BondCenter/BondTradeActivitySearchResult.jsp?'
link = 'https://finra-markets.morningstar.com/bondSearch.jsp'
qsp = {
'ticker': 'C679131',
'startdate': '10/03/2019',
'enddate': '10/03/2020'
}
payload = {
'postData': {'Keywords':[]},
'ticker': 'C679131',
'startDate': '',
'endDate': '',
'showResultsAs': 'B',
'debtOrAssetClass': '',
'spdsType': ''
}
params = {
'count': '20',
'sortfield': 'tradeDate',
'sorttype': '2',
'start': '0',
'searchtype': 'T',
'query': {"Keywords":[{"Name":"securityId","Value":"C679131"},{"Name":"tradeDate","minValue":"10/03/2019","maxValue":"10/03/2020"}]}
}
with requests.Session() as s:
s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'
s.headers['Referer'] = 'https://finra-markets.morningstar.com/BondCenter/UserAgreement.jsp'
r = s.post(start_url,params=qsp,data=payload)
s.headers['Referer'] = 'https://finra-markets.morningstar.com/BondCenter/BondTradeActivitySearchResult.jsp?ticker=C679131&startdate=10%2F03%2F2019&enddate=10%2F03%2F2020'
s.headers['X-Requested-With'] = 'XMLHttpRequest'
r = s.post(link,json=params)
print(r.status_code)
print(r.content)
How can I get the tabular content from that webpage using requests?
您需要打电话到:
使用
requests.Session()
存储cookie时。此外,调用Referer
头需要:之后,结果并不像baduker所指出的那样是JSON,您可以使用正则表达式对其进行重新建模:
Try this on repl.it
输出:
在Chrome开发者控制台中,在网络选项卡中,您可以右键单击:“标题选项/设置Cookies”,以快速捕获正在设置Cookies的呼叫
诀窍是用完全相同的头和cookie正确地模拟请求。我从开发者工具中获取了cookie原始字符串
以下是如何获取原始文本数据:
输出:
数据本身是一个纯文本,结果是无效的
JSON
。我不能马上解析它。经过几次尝试后,我意识到第一个键T
不在"
中,因此它不是作为有效的JSON
传递的,但是。。。一个简单的黑客就成功了要获取
JSON
对象,请使用以下命令(如果我找到一种不太老套的方法,我将编辑此命令):输出:
编辑:
为了证明即使是短期的(硬编码的)cookie也比根本没有数据好,这里有一个修改过的脚本版本,它为您要查找的股票代码生成一个数据转储
即使是那些该死的cookie,这也应该起作用,因为您请求的归档数据不太可能更改。因此,您可以获取它,保存它,然后继续
注意:如果我正在使用的cookie已经过时,只需将它们替换为
Developer Tool -> XHR -> bondSearch.jsp -> Headers -> Request Headers -> Cookie
中的任何值即可:__cfduid
qs_wsid
__cfruid
SessionID
(这始终与qs_wsid
相同)守则:
相关问题 更多 >
编程相关推荐