【发布时间】:2012-08-02 00:29:03
【问题描述】:
我已经到了使用 Javascript 和 Python3 进入网络抓取网页混战的地步。我很清楚我的靴子可能会碰到一匹死马,但无论如何我还是想画出我的六射手。这是一部意大利式西部片;做我的灰帽子?
::Backstory::
我正在使用 Python 3.2.3。
我有兴趣为用户定义的股票收集 YTD、1 年、3 年、5 年 10 年...和/或类似时间范围内的历史股票//etf//mutual_fund 价格数据, ETF或共同基金。我将我的网站设置在 Morningstar.com 上,因为它们倾向于提供尽可能多的数据,而无需登录; Finance.google.com 和 c 等其他人在提供的有关股票、etfs 和共同基金的数据方面往往不一致。
使用晨星来获取这些历史数据或他们称之为“跟踪总回报”的权衡是,他们使用 Javascript 来生成这些数据。
以下是晨星的一些示例链接:
我对 Javascript 生成的图表中的“尾随回报”部分、顶行左右的数字感兴趣。
::到目前为止尝试过::
我已经确认 wget 不能使用 Javascript;即使下载所有相关文件 [css, .js, &c] 也不允许我在浏览器或脚本中本地呈现 javascript。 StackOverflow 上的研究证实了这一点。愿意在这里更正。
我的研究告诉我,Python3 不存在 Mechanize。无论如何我都试过了,然后变成了警察沙威,大喊“我知道!”在错误消息“模块不存在”处。
::我听说过...::
->硒。但是,我的理解是,这需要你最喜欢的浏览器实际打开一个网页,四处导航,然后不关闭,因为 Selenium 没有“关闭此选项卡//窗口”命令//选项。如果我//my_user 想要获取许多 etf、股票和/或共同基金的历史数据怎么办?在浏览器中打开了很多标签//窗口,而这些标签并不一定要打开。
->httplib2.我认为这很好,但我怀疑它是否会与 Javascript 一起使用。是否,例如使用 .cache 和 get 选项?
import httplib2
conn = httplib2.Http(".cache")
page = conn.request(u"http://the_url","GET")
->风车。见“硒”。然而,我唱“拉曼查人”的调子不够调。
->Google 的webscraping 代码。尝试下载包含 Javascript 的页面会导致...积极的结果吗?
我读过关于必须“在没有浏览器的情况下模拟浏览器”的讨论。听起来像 Mechanize,但不是我目前理解的 Python3。
::我的问题::
有任何建议、指示、解决方案或“看这里”的指示吗?
非常感谢,
迈尔斯,尘土飞扬的沙漠村民。
【问题讨论】:
-
通过使用 Ajax 请求而不进行任何类型的会话 cookie 检查来至少过滤来自其他域的请求,他们使用 JavaScript 基本上使您的工作变得非常非常容易。
标签: javascript python python-3.x web-scraping