Python 3、Web抓取和Javascript[Oh My]
我已经到了使用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选项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
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基本上使您的工作非常非常简单。