之前我已经完成了网络抓取,但它从未如此复杂。我想从学校网站上获取课程信息。但是,所有课程信息都显示在网络刮刀的噩梦中。
首先,当您点击“课程表”网址时,它会先指示您浏览其他几个页面(我相信设置Cookie并检查其他废话)。
然后它最终加载一个带有iframe的页面,该iframe显然只是在从机构的网页(即arizona.edu)中加载时加载。
从那里提交表单必须通过按钮实现,这些按钮实际上不会重新加载页面,而只是提交一个AJAX查询,我认为它只是操纵iframe。
这个查询对我来说特别难以复制。我一直在使用PHP和curl模拟访问初始页面的浏览器,收集适当的cookie等。但是我认为我的curl函数发送的头文件有问题,因为在最初的“搜索表单”加载后它永远不会让我执行任何类型的查询。
任何帮助都会很棒......
http://www.arizona.edu/students/registering-classes - > “课程表”
或者就在这里: http://schedule.arizona.edu/
答案 0 :(得分:3)
如果你需要使用大量使用JS / AJAX的网站 - 你需要比php更强大的东西;)
首先 - 它必须是具有执行JS功能的完整浏览器,其次 - 必须有一些api用于自动浏览。
假设您还是个孩子(还有谁需要解析学校) - 尝试使用iMacros的Firefox。如果你是经验丰富的老手 - 看看Selenium。
答案 1 :(得分:3)
我曾经使用JS,iframe和各种各样的东西来删除很多页面。我使用PhantomJS作为无头浏览器,后来我用PhantomCurl包装器包装。包装器是一个python脚本,可以从命令行运行或作为模块导入
答案 2 :(得分:0)
你确定你被允许刮网站吗?
如果是,那么他们可以给你一个简单的REST API?
在极少数情况下,当他们允许您访问数据但不提供API时,我的建议是安装一些软件来记录您与网站的HTTP交互,也许是wireshark或某些HTTP代理,但它重要的是你得到记录的http请求的所有细节。完成后,分析它,并尝试将其重播到最新位。
在可能的杂务中,可能是在某个时间点服务器向您发送生成的javascript,需要由客户端浏览器执行才能进入下一步。在这种情况下,您需要了解如何解析收到的javascript,并找出如何移动下一步。
一个好主意也就是不要在突发模式下发出所有的http请求,放一些随机延迟,这样服务器看起来就像“人”一样。
但最后你需要弄清楚这一切是否值得这么麻烦?由于几乎任何可以解决的路障都可以解决,但它可能会非常复杂和耗时。