javascript - Python 3、网络抓取和 Javascript [Oh My]

标签 javascript python python-3.x web-scraping

我已经到了使用 Javascript 和 Python3 在网络抓取网页上进入混战的地步。我很清楚我的 Boot 可能会碰到一匹死马,但我还是想拔出我的六发手枪。这是西部意大利面;做我的灰帽子吗?

::背景故事::

我正在使用 Python 3.2.3。

我有兴趣收集 YTD、1 年、3 年、5 年、10 年...和/或用户定义股票的类似时间范围的历史股票//etf//mutual_fund 价格数据, ETF,或互惠基金。我将我的网站设置在 Morningstar.com 上,因为它们往往会提供尽可能多的数据而无需登录; finance.google.com 等其他人在提供有关股票、ETF 和共同基金的数据方面往往不一致。

使用 Morningstar 获取此历史数据或他们所说的“尾随总返回”的权衡是,他们使用 Javascript 生成此数据。

以下是来自 Morningstar 的一些示例链接:

A Mutual Fund;

An ETF;

A Stock.

我对 Javascript 生成的图表中数字的“尾随返回”部分、顶行左右感兴趣。

::到目前为止已尝试::

我已经确认 wget 不支持 Javascript;即使下载所有相关文件 [css、.js、&c] 也不允许我在浏览器或脚本中本地呈现 javascript。 StackOverflow 上的研究证实了这一点。我愿意在这里得到纠正。

我的研究告诉我,Python3 不存在 Mechanize。不管怎样,我试过了,变成了警察沙威,大声喊着“我就知道!”在错误消息“模块不存在”处。

::我听说过...::

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

->httplib2.我认为这很好,但我怀疑它是否可以使用 Javascript。例如,是否使用 .cache 和 get 选项?

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

->风车。参见“ Selenium ”。然而,我跑调到足以唱“拉曼查人”。

->Google 的 webscraping代码。尝试下载载有 Javascript 的页面会导致……积极的结果吗?

我读过关于必须“在没有浏览器的情况下模拟浏览器”的讨论。听起来像 Mechanize,但不是我目前理解的 Python3。

::我的问题::

有任何建议、指示、解决方案或“看这里”的指示吗?

非常感谢,

Miles,尘土飞扬的沙漠村民。

最佳答案

当页面通过 javascript 加载数据时,它必须通过 XMLHttpRequest 函数 (XHR) 向服务器发出请求以获取该数据。您可以查看他们发出的请求,然后使用 wget 自己发出请求!

要找出他们发出的请求,请使用 Web Inspector(Chrome 和 Safari)或 Firebug (Firefox)。以下是在 Chrome 中执行此操作的方法:

wrench/tools/developer tools/Network(工具顶部的选项卡)/底部的 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=VAW http://performance.morningstar.com/Performance/cef/trailing-total-returns.action?t=INTC http://performance.morningstar.com/Performance/cef/trailing-total-returns.action?t=VHCOX

现在您可以wget 那些URI 并直接解析出数据。

关于javascript - Python 3、网络抓取和 Javascript [Oh My],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11804497/

相关文章:

javascript - sequelize 用小时 = 2 解释日期

python - MultiIndex 上列级别上的 Pandas GroupBy 和 max

python - 防止从空 FIFO 读取数据时发生阻塞

python - 是否可以使用 Google Assistant 作为自制 Python 个人助理的基础?

python - 将列表的每个元素与另一个列表的相应元素进行比较的最快方法是什么?

python - os.setuid 不改变当前用户

javascript - 如何在html输入中获取jquery数组

javascript - 带有 MomentJS 的 UnderscoreJS 不会过滤动态数组的结果

javascript - 使用 `!=` 和 `==` 比较对象和 bool 值有不同的结果

python - 如何在 Django 中返回带有 token 的用户 ID?