Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3、Web抓取和Javascript[Oh My]_Javascript_Python_Python 3.x_Web Scraping - Fatal编程技术网

Python 3、Web抓取和Javascript[Oh My]

Python 3、Web抓取和Javascript[Oh My],javascript,python,python-3.x,web-scraping,Javascript,Python,Python 3.x,Web Scraping,我已经到了使用Javascript和Python3进入网络抓取网页混战的地步。我很清楚我的靴子可能会碰到一匹死马,但我还是想画我的六杆射手。这是一个意大利面西部;这是我的灰帽子吗 ::背景故事:: 我正在使用Python 3.2.3 我有兴趣收集年初至今、1年期、3年期、5年期和10年期的历史股票//etf//共同基金价格数据。。。和/或用户定义股票、etf或共同基金的类似时间表。我把我的网站设置在Morningstar.com上,因为它们倾向于提供尽可能多的数据,而无需登录;其他人,比如fin

我已经到了使用Javascript和Python3进入网络抓取网页混战的地步。我很清楚我的靴子可能会碰到一匹死马,但我还是想画我的六杆射手。这是一个意大利面西部;这是我的灰帽子吗

::背景故事::

我正在使用Python 3.2.3

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

使用晨星(Morningstar)获取这些历史数据,或者他们称之为“跟踪总回报”的权衡是,为了生成这些数据,他们使用Javascript

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

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

::迄今为止已尝试::

我已经确认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")
->风车。见“硒”。然而,我唱《拉曼查的男人》的时候,已经足够走调了

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

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

::我的问题:

有什么建议、指针、解决方案或“看这里”的指示吗

非常感谢,


Miles,Dusty沙漠村民。

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

要了解他们发出的请求,请使用Web检查器(Chrome和Safari)或Firebug(Firefox)。以下是如何在Chrome中执行此操作:

扳手/工具/开发人员工具/网络(工具顶部的选项卡)/底部的XHR过滤器

如果仔细查看XHR请求url,您会注意到所有后续返回都具有相同的格式:

您只需要指定
t
。例如:


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

我需要停止点卖淫。这是对基本正确的原始答案的一个更好的注释:“Chrome使查看XHR请求变得非常容易。开发者工具(扳手或右键单击/检查元素)/网络(工具顶部的选项卡)/底部的XHR过滤器。”XHR指的是直接从JS发出的http请求。或者Ajax,如果必须的话。(我宁愿我们没有这样做)。你所要做的就是抓取表和JSON。不错。谢谢你,埃里克!:)我将修改我的答案,使之更清楚。对于一个以前没有在Chrome中使用过开发工具的人来说,这不太容易理解。非常感谢Cypress,这让我很恼火。我将给这个旋转XD。。。关于萤火虫的绝妙提示&类似;我能够以同样的//相似的结果遵循这种方法。再次感谢。通过使用Ajax请求而不进行任何会话cookie检查来至少过滤来自其他域的请求,它们使用JavaScript基本上使您的工作非常非常简单。