使用python从使用javascript显示信息的网站下载数据

时间:2015-11-15 00:36:57

标签: python python-3.x web-scraping beautifulsoup

我通常使用以下模板脚本从网站下载数据:

import urllib.request as web
from bs4 import BeautifulSoup
...
url_to_visit ='http://www.website-link-to-download-data'
source_code =  web.urlopen(url_to_visit).read()
source_code = ''.join(map(chr, source_code)
source_code = source_code.split('\n')
## then further process the lines returned in `source_code` as needed

但有时我会遇到非常困难的网站。

考虑网站:https://www.spice-indices.com/idp2/Main#home。假设从第一个表Intraday Alerts - United States开始,我想通过Python脚本下载单击SP TMI选项卡时显示的信息。

我查看了上面splitSource的输出,但我无法弄清楚如何提取我想要的信息。它似乎是使用Javascript后端来显示信息。有人可以给我任何指示或建议吗?

我正在使用Python 3.x。

1 个答案:

答案 0 :(得分:1)

当您激活“SP TMI”选项卡时,会有一个POST请求发送到“intraday-announcements.json”端点 - 在您的代码中模拟并解析JSON响应。

使用requests示例工作代码:

import requests

with requests.Session() as session:
    session.get("https://www.spice-indices.com/idp2/Main#home")

    response = session.post("https://www.spice-indices.com/idp2/intraday/effectivedate/11-14-2015/intraday-announcements.json", data={
        "start": "0",
        "limit": "10",
        "indexKey": "SPUSA-TMI-USDUF--P-US----"
    })

    data = response.json()["widget_data"]
    for item in data:
        print(item["EVENT_NAME"])

打印:

Dividend
Weekly Share Change
Special Dividend
Merger/Acquisition
Merger/Acquisition
Drop
Merger/Acquisition
Merger/Acquisition
Drop
Identifier Changes

请注意,生效日期实际上在网址内,请参阅11-14-2015部分。