使用python从ajax请求中提取XML响应

使用python从ajax请求中提取XML响应,python,ajax,web-scraping,python-requests,Python,Ajax,Web Scraping,Python Requests,我试图在点击max(时间范围)按钮时获取加载到图表中的数据。数据通过ajax请求加载 我检查了请求并试图用请求python库重现它,但我只能从这个图表中检索1年的数据 以下是我使用的代码: r = requests.get("https://www.justetf.com/en/etf-profile.html?0-4.0-tabs-panel-chart-dates-ptl_max&groupField=none&sortField=ter&sortOrder=asc&

我试图在点击max(时间范围)按钮时获取加载到图表中的数据。数据通过ajax请求加载

我检查了请求并试图用请求python库重现它,但我只能从这个图表中检索1年的数据

以下是我使用的代码:

r = requests.get("https://www.justetf.com/en/etf-profile.html?0-4.0-tabs-panel-chart-dates-ptl_max&groupField=none&sortField=ter&sortOrder=asc&from=search&isin=IE00B3VWN518&tab=chart&_=1576272593482")
r.content
我还尝试使用会话:

from requests import Session
session = Session()

session.head('http://justetf.com')

response = session.get(
    url='https://www.justetf.com/en/etf-profile.html?0-4.0-tabs-panel-chart-dates-ptl_max&groupField=none&sortField=ter&sortOrder=asc&from=search&isin=IE00B3VWN518&tab=chart&_=1575929227619',
    data = {"0-4.0-tabs-panel-chart-dates-ptl_max":"",
            "groupField":"none","sortField":"ter",
            "sortOrder":"asc","from":"search",
            "isin":"IE00B3VWN518",
            "tab":"chart",
            "_":"1575929227619"
           },

    headers={
        'Host': 'www.justetf.com',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0',
        'Accept': 'application/xml, text/xml, */*; q=0.01',
        'Accept-Language': 'en-US,en;q=0.5',
        'Accept-Encoding': 'gzip, deflate, br',
        'Wicket-Ajax': 'true',
        'Wicket-Ajax-BaseURL': 'en/etf-profile.html?0&groupField=none&sortField=ter&sortOrder=asc&from=search&isin=IE00B3VWN518&tab=chart',
        'Wicket-FocusedElementId': 'id28',
        'X-Requested-With': 'XMLHttpRequest',
        'Connection': 'keep-alive',
        'Referer': 'https://www.justetf.com/en/etf-profile.html?groupField=none&sortField=ter&sortOrder=asc&from=search&isin=IE00B3VWN518&tab=chart',
        'Cookie': 'locale_=en; _ga=GA1.2.1297456970.1574289342; cookieconsent_status=dismiss; AWSALB=QMWHJxgfcpLXJLqX0i0FgBuLn+mpVHVeLRQ6upH338LdggA4/thXHT2vVWQX7pdBd1r486usZXgpAF8RpDsGJNtf6ei8e5NHTsg0hzVHR9C+Fj89AWuQ7ue+fzV2; JSESSIONID=ABB2A35B91751CA9B2D293F5A04505BE; _gid=GA1.2.1029531470.1575928527; _gat=1',
        'TE': 'Trailer'


        },

    cookies = {"_ga":"GA1.2.1297456970.1574289342","_gid":"GA1.2.1411779365.1574289342","AWSALB":"5v+tPMgooQC0deJBlEGl2wVeUSmwVGJdydie1D6dAZSRAK5eBsmg+DQCdBj8t25YRytC5NIi0TbU3PmDcNMjiyFPTp1xKHgwNjZcDvMRePZjTxthds5DsvelzE2I","JSESSIONID":"310F346AED94D1A345207A3489DCF83D","locale_":"en"}
)
但我得到了这样的回应

<ajax-response><redirect><![CDATA[/en/etf-profile.html?0&groupField=none&sortField=ter&sortOrder=asc&from=search&isin=IE00B3VWN518&tab=chart]]></redirect></ajax-response>


为什么当我点击MAX时,我在浏览器上看到的XML文件没有得到响应?

好的,下面是我获取您所需数据的解决方案:

url=”https://www.justetf.com/en/etf-profile.html"
查询字符串={
#修改此字符串以获取所需的时间线
#如您所见,当前设置为“最大”
“0-1.0-tabs-panel-chart-dates-ptl_max”:”,
“组域”:“无”,
“sortField”:“ter”,
“分拣员”:“asc”,
“发件人”:“搜索”,
“isin”:“IE00B3VWN518”,
“选项卡”:“图表”,
"_":"1576627890798"}
#并非所有这些标题都是必需的
标题={
“权威”:“www.justetf.com”,
“接受”:“应用程序/xml,文本/xml,*/*;q=0.01”,
“x-request-with':“XMLHttpRequest”,
“wicket ajax baseurl”:“en/etf profile.html?0&;groupField=none&;sortField=ter&;sortOrder=asc&;from=search&;isin=IE00B3VWN518&;tab=chart”,
“wicket ajax”:“true”,
'wicket focusedelementid':“id27”,
“连接”:“保持活动状态”,
}
会话=请求。会话()
#第一个请求不会返回我们想要的内容,但会设置cookies
response=session.get(url,params=querystring)
#Cookie已经设置好了,我们可以发出第二个请求并获得我们想要的数据
response=session.get(url,headers=headers,params=querystring)
打印(response.text)
作为奖励,我添加了一个repl.it的链接,在这里我实际解析数据并获取每个单独的数据点。你可以找到这个


如果有帮助,请告诉我

你想得到这样的回应吗<代码>因为这就是我得到的原因。@foba试图获得网页的
XML
响应的
OP
。你在哪里看到的?不要在你的请求中使用
cookies
headers
data
。像这样的
session.get(url)
你会得到正确的html响应。@foba,正如αԋɱҽαԃєιcαη所说的,我试图通过单击max来获得xml响应,尽管我有点困惑,因为你必须用第一个
session.get()
设置cookies,然后用第二个来获得响应。我是否应该始终为ajax请求执行此操作?你能给我指一篇解释这一点的帖子或文章吗?我没有找到关于刮削的好资源,你有什么建议吗?