如何抓取网站内容(*COMPLEX* iframe, javascript提交)
How to scrape website content (*COMPLEX* iframe, javascript submission)
我以前做过网页抓取,但从来没有这么复杂。我想从学校网站上获取课程信息。然而,所有的课程信息都显示在网页刮板的噩梦中。
首先,当你点击"课程表"url时,它会引导你先浏览其他几个页面(我相信是为了设置cookie和检查其他垃圾)。
然后它最终加载了一个带有iframe的页面,该页面显然只喜欢从机构的网页(如arizona.edu)加载。
从那里表单提交必须通过按钮,实际上不重新加载页面,但仅仅提交一个AJAX查询,我认为它只是操纵iframe。
这个查询对我来说特别难复制。我一直在使用PHP和curl来模拟浏览器访问初始页面,收集适当的cookie等。但我认为我有一个问题,我的curl函数发送的头,因为它从来没有让我执行任何类型的查询后,初始的"搜索表单"加载。
任何帮助都是很棒的…
http://www.arizona.edu/students/registering-classes ->"课程表"
或者就在这里:http://schedule.arizona.edu/
如果你需要抓取大量使用JS/AJAX的站点-你需要比php更强大的东西;)
首先,它必须是一个能够执行JS的完整浏览器,其次,必须有一些自动浏览的api。
假设你是一个孩子(谁会需要解析一个学校)-尝试Firefox与iMacros。如果您是经验丰富的老手,请参考Selenium。
我曾经用JS, iframes和各种各样的东西来废弃很多页面。我使用PhantomJS作为一个无头浏览器,后来我用PhantomCurl包装器包装。包装器是一个python脚本,可以从命令行运行或作为模块导入
你确定你可以抓取站点吗?
如果是,那么他们可以给你一个简单的REST api?
在极少数情况下,当他们会允许你得到的数据,但不会提供API,我的建议是安装一些软件来记录你与网站的HTTP交互,也许是wireshark,或一些HTTP代理,但重要的是,你得到的所有细节的HTTP请求记录。在你有了这些之后,分析它,并试着重放它直到最近的一点。
在可能的杂务中,可能是在某个时间点服务器向您发送生成的javascript,需要由客户端浏览器执行以进入下一步。在这种情况下,您需要弄清楚如何解析接收到的javascript,并弄清楚下一步如何进行。
另一个好主意是不要在突发模式下触发所有的http请求,而是放置一些随机延迟,以便它在服务器上看起来更"人性化"。
但是最后你需要弄清楚这些麻烦是否值得?因为几乎所有的抓取障碍都是可以解决的,但它可能会相当复杂和耗时。
- 防止Iframe窗体在新窗口中打开
- 将样式表插入iframe
- 在Twitter上用ie9中的空白src访问iframe的contentWindow
- 使用jQuery从原始页面内容创建iframe
- Highslide(iframe的侦听器)
- iframe正在添加标签,需要删除它们
- 通过javascript/html访问twitter共享iframe
- 如何在Facebook上的iframe应用程序中使后退按钮返回到上一页
- 如何使用Angular动态添加iframe-src
- 由于iframe导致的问题
- 正在从页面中删除iframe
- 检测iframe是否跨域的愚蠢方法
- 是否可以使用iframe API在iOS浏览器上播放youtube视频
- 如何操作iframe之外的元素
- 如何使用javascript/jquery获取iframe的URL的锚点属性
- 对特定的iframe使用javascript书签
- node-webkit-从父窗口捕获iframe鼠标事件
- 重定向iFrame中的父URL
- 如何关闭html中的iframe弹出窗口
- 如何抓取网站内容(*COMPLEX* iframe, javascript提交)