如何抓取网站内容(*COMPLEX* iframe, javascript提交)

How to scrape website content (*COMPLEX* iframe, javascript submission)

本文关键字:iframe COMPLEX javascript 提交 何抓取 抓取 网站      更新时间:2023-09-26

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

首先,当你点击"课程表"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请求,而是放置一些随机延迟,以便它在服务器上看起来更"人性化"。

但是最后你需要弄清楚这些麻烦是否值得?因为几乎所有的抓取障碍都是可以解决的,但它可能会相当复杂和耗时。