我已经到了使用Javascript和Python3进入web页面抓取的混战阶段。我很清楚我的靴子可能会碰到一匹死马,但我还是想画我的六枪。这是西式意大利面,是我的灰色帽子吗?在
::背景故事::
我使用的是python3.2.3。在
我有兴趣收集历史股票//etf//共同基金本年迄今、1年、3年、5年10年的价格数据。。。和/或用户定义的股票、etf或共同基金的类似时间表。我把我的网站设置在晨星网,因为他们倾向于提供尽可能多的数据,而不一定需要登录;其他人如财经google.com&;c在提供关于股票、ETF和共同基金的数据方面往往不一致。在
使用晨星来处理这些历史数据,或者他们称之为“跟踪总回报率”(Trailing Total Returns,Trailing Total Returns)的代价是,为了生成这些数据,他们使用Javascript。在
以下是晨星的一些链接示例:
我对Javascript生成的图表中的“trailding Returns”部分、最上面一行的数字感兴趣。在
: 我已经确认wget不能使用Javascript;即使下载所有相关文件[css、.js和c]也不允许我在浏览器或脚本中本地呈现Javascript。关于StackOverflow的研究证实了这一点。我愿意在此更正。在 我的研究告诉我,Python3不存在机械化。不管怎样,我还是试过了,结果变成了沙威警察,喊道:“我知道!”出现错误消息“模块不存在”。在 ::我听说过……:: ->硒。但是,我的理解是,这需要您最喜欢的浏览器实际打开一个网页,四处导航,然后不要关闭,因为Selenium没有“关闭此选项卡//窗口”命令//选项。如果我的用户想要获取许多ETF、股票和/或共同基金的历史数据,该怎么办?在浏览器中打开的许多选项卡/窗口不一定需要打开。在 ->httplib2。我觉得这很好,但是我怀疑它是否能用Javascript来运行。是吗,例如使用.cache和get选项?在 ->风车。见“硒”。不过,我已经走调了,唱起了《拉曼查的男人》。在 ->谷歌的webscraping代码。试图下载一个Javascript页面会导致。。。积极的结果?在 我读过一些关于必须“模拟没有浏览器的浏览器”的闲聊。听起来像机械化,但不是像我目前所理解的Python3。在 ::我的问题:: 有什么建议,建议,解决方案,或者“看看这里”的指示?在 非常感谢 迈尔斯,尘土飞扬的沙漠村民。在import httplib2
conn = httplib2.Http(".cache")
page = conn.request(u"http://the_url","GET")
当页面通过javascript加载数据时,它必须通过XMLHttpRequest函数(XHR)向服务器发出请求以获取数据。您可以看到他们提出了什么请求,然后使用wget自己提出这些请求!在
要知道他们发出了哪些请求,可以使用Web检查器(Chrome和Safari)或Firebug(Firefox)。以下是如何在Chrome中实现:
扳手/工具/开发工具/网络(工具顶部的标签)/底部的XHR过滤器。在
Here's an example request they make in javascript
如果仔细查看XHR请求url,会发现所有后面的返回都具有相同的格式:
http://performance.morningstar.com/Performance/cef/trailing-total-returns.action?t=
您只需指定
t
。例如:http://performance.morningstar.com/Performance/cef/trailing-total-returns.action?t=VAWhttp://performance.morningstar.com/Performance/cef/trailing-total-returns.action?t=INTChttp://performance.morningstar.com/Performance/cef/trailing-total-returns.action?t=VHCOX
现在您可以
wget
这些uri并直接解析出数据。在相关问题 更多 >
编程相关推荐