通过POST请求从盈透证券获取股票代码
大家好,出于某种原因,Interactive Brokers(一个在线经纪公司)并没有很方便地提供获取股票代码(tickers)的方法。我现在是通过他们的交易所页面,用普通的请求查询来获取这些代码。不过,这种方法变得不太可靠了。我想模仿他们的产品搜索功能,链接在这里:https://www.interactivebrokers.co.uk/en/trading/products-exchanges.php#/
但是,我在实现这个功能时遇到了一些问题,因为我对这种网页抓取(web scraping)还不是很熟悉。
这是我目前的代码:
url = "https://www.interactivebrokers.co.uk/IBSales/servlet/exchange?apiPath=getProductsByFilters"
payload = {"pageNumber":1,"pageSize":"100","sortField":"symbol","sortDirection":"ASC","product_country":["GB"],"product_symbol":"","new_product":"all","product_type":["STK"],"domain":"uk"}
headers ={'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.28 Safari/537.36'}
response = requests.post(url, data=payload, headers=headers)
print(response.text)
但是,它返回了以下内容:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 400</title>
</head><body>
<h1>400</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>
所以显然我做得不对。我在想有没有人能帮我解决这个问题。
谢谢大家。
1 个回答
1
感谢furas的帮助,我成功地让我的代码运行起来,使用了以下代码
url = "https://www.interactivebrokers.co.uk/IBSales/servlet/exchange?apiPath=getProductsByFilters"
session = requests.Session()
session.get("https://www.interactivebrokers.co.uk/IBSales/servlet/exchange?apiPath=getProductsByFilters")
payload = {
"pageNumber": 1,
"pageSize": "100",
"sortField": "symbol",
"sortDirection": "ASC",
"product_country": ["GB"],
"product_symbol": "",
"new_product": "all",
"product_type": ["STK"],
"domain": "uk"
}
headers = {
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.28 Safari/537.36',
'content-type': 'application/json;charset=UTF-8'
}
response = session.post("https://www.interactivebrokers.co.uk/IBSales/servlet/exchange?apiPath=getProductsByFilters", json=payload, headers=headers)
print(response.text)