如何使用python请求(获取)和读取xml文件?

Dom*_*Dom 4 python curl urllib http-headers python-requests

我尝试使用Python 在Treasury Direct上请求RSS提要。过去,我曾使用urllib或请求库来达到此目的,并且效果很好。但是,这次,我继续收到406状态错误,据我了解,这是页面告诉我它不接受请求中标头详细信息的方式。我已经尝试将其更改为无济于事。
这就是我尝试过的方式

import requests
url = 'https://www.treasurydirect.gov/TA_WS/securities/announced/rss'
user_agent = {'User-agent': 'Mozilla/5.0'}
response  = requests.get(url, headers = user_agent)
print response.text
Run Code Online (Sandbox Code Playgroud)

环境: Python 2.7和3.4。我也尝试通过curl进行访问,并具有完全相同的错误。

我认为这是特定于页面的,但是无法弄清楚如何适当地构造阅读此页面的请求。

我在页面上找到了一个API,可以在json中读取相同的数据,因此对我来说,这个问题比真正的问题更令人好奇。

任何答案将不胜感激!

标头详细信息

{'surrogate-control': 'content="ESI/1.0",no-store', 'content-language': 'en-US', 'x-content-type-options': 'nosniff', 'x-powered-by': 'Servlet/3.0', 'transfer-encoding': 'chunked', 'set-cookie': 'BIGipServerpl_www.treasurydirect.gov_443=3221581322.47873.0000; path=/; Httponly; Secure, TS01598982=016b0e6f4634928e3e7e689fa438848df043a46cb4aa96f235b0190439b1d07550484963354d8ef442c9a3eb647175602535b52f3823e209341b1cba0236e4845955f0cdcf; Path=/', 'strict-transport-security': 'max-age=31536000; includeSubDomains', 'keep-alive': 'timeout=10, max=100', 'connection': 'Keep-Alive', 'cache-control': 'no-store', 'date': 'Sun, 23 Apr 2017 04:13:00 GMT', 'x-frame-options': 'SAMEORIGIN', '$wsep': '', 'content-type': 'text/html;charset=ISO-8859-1'}
Run Code Online (Sandbox Code Playgroud)

vol*_*old 5

您需要添加accept到标头请求:

import requests

url = 'https://www.treasurydirect.gov/TA_WS/securities/announced/rss'
headers = {'accept': 'application/xml;q=0.9, */*;q=0.8'}
response = requests.get(url, headers=headers)

print response.text
Run Code Online (Sandbox Code Playgroud)

  • 我只是想分享 [这个链接](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept) 让更多的读者了解你为什么这样设计标题 (2认同)