通过POST请求从盈透证券获取股票代码

0 投票
1 回答
21 浏览
提问于 2025-04-13 20:42

大家好,出于某种原因,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)

撰写回答