python3、Webscraping和Javascript[Oh My]

2024-04-30 06:25:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经到了使用Javascript和Python3进入web页面抓取的混战阶段。我很清楚我的靴子可能会碰到一匹死马,但我还是想画我的六枪。这是西式意大利面,是我的灰色帽子吗?在

::背景故事::

我使用的是python3.2.3。在

我有兴趣收集历史股票//etf//共同基金本年迄今、1年、3年、5年10年的价格数据。。。和/或用户定义的股票、etf或共同基金的类似时间表。我把我的网站设置在晨星网,因为他们倾向于提供尽可能多的数据,而不一定需要登录;其他人如财经google.com&;c在提供关于股票、ETF和共同基金的数据方面往往不一致。在

使用晨星来处理这些历史数据,或者他们称之为“跟踪总回报率”(Trailing Total Returns,Trailing Total Returns)的代价是,为了生成这些数据,他们使用Javascript。在

以下是晨星的一些链接示例:

A Mutual Fund;

An ETF;

A Stock.

我对Javascript生成的图表中的“trailding Returns”部分、最上面一行的数字感兴趣。在

我已经确认wget不能使用Javascript;即使下载所有相关文件[css、.js和c]也不允许我在浏览器或脚本中本地呈现Javascript。关于StackOverflow的研究证实了这一点。我愿意在此更正。在

我的研究告诉我,Python3不存在机械化。不管怎样,我还是试过了,结果变成了沙威警察,喊道:“我知道!”出现错误消息“模块不存在”。在

::我听说过……::

->硒。但是,我的理解是,这需要您最喜欢的浏览器实际打开一个网页,四处导航,然后不要关闭,因为Selenium没有“关闭此选项卡//窗口”命令//选项。如果我的用户想要获取许多ETF、股票和/或共同基金的历史数据,该怎么办?在浏览器中打开的许多选项卡/窗口不一定需要打开。在

->httplib2。我觉得这很好,但是我怀疑它是否能用Javascript来运行。是吗,例如使用.cache和get选项?在

import httplib2
conn = httplib2.Http(".cache")
page = conn.request(u"http://the_url","GET")

->风车。见“硒”。不过,我已经走调了,唱起了《拉曼查的男人》。在

->谷歌的webscraping代码。试图下载一个Javascript页面会导致。。。积极的结果?在

我读过一些关于必须“模拟没有浏览器的浏览器”的闲聊。听起来像机械化,但不是像我目前所理解的Python3。在

::我的问题::

有什么建议,建议,解决方案,或者“看看这里”的指示?在

非常感谢

迈尔斯,尘土飞扬的沙漠村民。在


Tags: 数据用户基金浏览器页面javascriptpython3returns
1条回答
网友
1楼 · 发布于 2024-04-30 06:25:03

当页面通过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并直接解析出数据。在

相关问题 更多 >