Php 如何删除网站内容(*复杂*iframe,javascript提交)

Php 如何删除网站内容(*复杂*iframe,javascript提交),php,javascript,iframe,web-scraping,Php,Javascript,Iframe,Web Scraping,我以前做过网页抓取,但从来没有这么复杂。我想从学校网站上获取课程信息。然而,所有的课程信息都显示在网络刮板的噩梦中 首先,当你点击“课程表”url时,它会引导你先浏览其他几个页面(我相信设置cookies和检查其他垃圾) 然后,它最后加载一个带有iframe的页面,显然只有当它从机构的网页(即亚利桑那州的edu)中加载时,它才喜欢加载iframe 从这里开始,表单提交必须通过按钮进行,这些按钮实际上不会重新加载页面,而只是提交一个AJAX查询,我认为它只是操纵了iframe 这个查询对我来说尤其

我以前做过网页抓取,但从来没有这么复杂。我想从学校网站上获取课程信息。然而,所有的课程信息都显示在网络刮板的噩梦中

首先,当你点击“课程表”url时,它会引导你先浏览其他几个页面(我相信设置cookies和检查其他垃圾)

然后,它最后加载一个带有iframe的页面,显然只有当它从机构的网页(即亚利桑那州的edu)中加载时,它才喜欢加载iframe

从这里开始,表单提交必须通过按钮进行,这些按钮实际上不会重新加载页面,而只是提交一个AJAX查询,我认为它只是操纵了iframe

这个查询对我来说尤其难以复制。我一直在使用PHP和curl模拟浏览器访问初始页面,收集正确的cookies等等。但是我认为我的curl函数发送的头有问题,因为它从不允许我在初始“搜索表单”加载后执行任何类型的查询

任何帮助都会很棒

->“课程表”

或者就在这里:

您确定可以刮取该站点吗

如果是,那么他们可以给你一个简单的RESTAPI吗

在极少数情况下,当他们允许您访问数据,但不提供API时,我的建议是安装一些软件来记录您与web站点的HTTP交互,可能是wireshark或一些HTTP代理,但重要的是要记录HTTP请求的所有详细信息。完成后,对其进行分析,并尝试将其回放到最新的位置

在可能的琐事中,可能是服务器在某个时间点向您发送生成的javascript,这些javascript需要由客户端浏览器执行,以便进入下一步。在本例中,您需要了解如何解析接收到的javascript,并了解下一步如何移动

另一个好主意是不要在突发模式下触发所有http请求,放置一些随机延迟,以便在服务器上看起来更“人性化”


但最终你需要弄清楚这一切是否值得费心?因为几乎所有的刮削障碍都是可以解决的,但是它会变得非常复杂和耗时。

如果你需要刮削一个使用大量JS/AJAX的站点,你需要比php更强大的东西;)

首先,它必须是能够执行JS的完整浏览器,其次,必须有一些用于自动浏览的api


假设你是一个孩子(还有谁需要解析一所学校)——试试Firefox。如果你是经验丰富的老手,那就看看Selenium吧。

我曾经用JS、iFrame和各种各样的东西来废掉很多页面。我用它作为无头浏览器,后来用包装纸包装。包装器是一个python脚本,可以从命令行运行,也可以作为模块导入。如果他们没有API来提供他们的数据,他们就不想这样scraped@Col.Shrapnel我需要一些数据。我怀疑他们设置这个系统是为了避免被刮伤。这是他们为管理整个学术界而实施的更大系统的一部分。顾问们使用同样的系统来批准学生上课等等,我不认为他们是在试图阻止顾问们刮胡子。这只是一个他们选择使用的预建系统,这是我见过的最笨重的东西。我计划开发一个应用程序来帮助学生,如果这个应用程序有任何发展势头,我会直接联系学校,说嘿……给我API,这样我就可以用简单的方式来做。有一个UofA Android应用程序显示课程状态。也许我会从那里开始。它需要一些API函数来收集它的信息。我再次高度怀疑他们的制度是为了避免被刮伤。然而,我怀疑他们是否会实现一些功能来满足我的需求。我可能能够访问UofA应用程序使用的信息。你知道有哪个Windows应用程序可以跟踪Android应用程序的web查询吗?嗯,试着下载Android sdk和emulator,然后在它下面运行应用程序。因为emulator充当http代理,所以它很可能还提供日志记录。呃,所以现在我实际上必须专门用一台家用计算机来完成这个操作?除非我真的有一台专用服务器,否则我希望有一些解决方案可以作为网站cron作业的一部分轻松实现。你可以在服务器上运行firefox/iceweasel。检查本演示文稿的第70-72页。这是非常有用的,先生,尽管我怀疑我可能需要一个专用服务器或虚拟服务器来安装iMacro。这一切都很有帮助,因为这可能是我最终的选择。Baring有人发布了一个指向一些php代码的url,这些代码工作起来就像一个梦,这正是我想要的。