如何网上刮一个混淆的JavaScript网站?

时间:2014-08-29 15:55:37

标签: selenium web-scraping

我想使用.csv文件中的符号列表下载所有历史股票价格。问题是我想从它下载的网站是一个混淆的javascript网站,我无法获得直接下载链接:http://www.nasdaq.com/symbol/aapl/historical(底部的下载链接)。对于每个页面,我都必须选择10年选项。

  1. 是否有自动获取所有直接下载链接的方法 尽管混淆了?

  2. 让我们说是否可以自动化下载任务 Selenium认为每次我都有这个下载提示 下载什么?我也必须重命名文件,因为 默认名称与symbole(HistoricalQuotes.csv)无关,我该怎么办?

  3. 还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

如果接受了python解决方案,我会做一个快速的脚本:

import requests
from bs4 import BeautifulSoup

s = requests.session()

quote = "AAPL"
period = "10y"

def get_csrf():
    url = "http://www.nasdaq.com/symbol/{}/historical".format(quote.lower())
    req = s.get(url)
    bs = BeautifulSoup(req.text)

    data = {
        "__VIEWSTATE": bs.find("input", {"name": "__VIEWSTATE"}).attrs['value'],
        "__VIEWSTATEGENERATOR": bs.find("input", {"name": "__VIEWSTATEGENERATOR"}).attrs['value'],
        "__EVENTVALIDATION": bs.find("input", {"name": "__EVENTVALIDATION"}).attrs['value'],
        "__VIEWSTATEENCRYPTED": ""
    }

    return data

url = "http://www.nasdaq.com/symbol/{}/historical".format(quote.lower())
data = get_csrf()
data['ctl00$quotes_content_left$submitString'] = "{}|true|{}".format(period, quote)

req = s.post(url, data=data)
csv_data = req.text

print(csv_data)

您可以将报价变量更改为您想要的任何报价。 csv_data变量包含csv文件的数据。您可以将其保存到文件中或立即使用它。

该脚本需要两个库,请求和beautifulsoup。它适用于Python 2和Python 3。