使用Curl或其他方法检索完全呈现的页面?

时间:2012-05-30 06:12:10

标签: php javascript curl

有没有办法从带有javascript帖子渲染的页面中检索完全呈现的html?如果我使用curl,它只是检索基本html,但缺少iframes的后期呈现,javascript处理等。

实现这一目标的最佳方法是什么?

6 个答案:

答案 0 :(得分:3)

没有其他人回答(除了上面的副本,但我稍后会谈到)我会尽可能地帮助你。

没有“简单”的答案。 PHP无法本机处理javascript /导航DOM,所以你需要一些可以的东西。

我看到你的选择:

  1. 如果您正在使用屏幕抓取(这是我希望您也希望加载Flash),我建议您使用其中一个商业API来执行此操作。您可以在此列表中找到一些http://www.programmableweb.com/apitag/?q=thumbnail,例如http://www.programmableweb.com/api/convertapi-web2image

  2. 否则,您需要自己运行一些可以处理Javascript以及服务器上的DOM或连接到您的服务器的DOM。为此,您需要一个自动浏览器,您可以运行服务器端并获取所需的信息。按照上面Bergi评论中的列表,您需要测试一个合适的解决方案 - 主要的一个Selinium非常适合在已知网站上进行“单元测试”,但我不确定如何编写它来处理随机例如,网站。正如您(可能)只有一个“自动浏览器”并且您不知道每个页面加载需要多长时间,您需要对请求进行排队并一次处理一个。你还需要确保弹出警报()被处理,所有第三方库(你说你想要闪存?!)安装,处理重定向,超时和潜在的内存(如果不停地运行,你我会定期想要杀死你的浏览器并重新启动它以清理内存!)。还可以处理病毒攻击,弹出窗口以及完全关闭浏览器的请求。

  3. 第三,VB有一个Web浏览器组件。很久以前我用它来做一个类似的东西,但在一个已知的网站上。是否有可能使用.NET(对我来说,这是一个巨大的安全风险),以及你如何编程未知数(例如弹出窗口和Flash)我不知道。但是,如果你是一个充满冒险精神的.NET开发人员可能会提出更多建议。

  4. 总之 - 如果你想要的不仅仅是屏幕抓取而且可以选择选项1,祝你好运;)

答案 1 :(得分:1)

如果您正在寻找没有GUI的脚本,您可以使用无头浏览器。我使用PhantomJS来完成类似的任务。

答案 2 :(得分:0)

如果仍然有意义,我发现实现此目的的简单方法是将PhantomJs作为服务使用。

public string GetPagePhantomJs(string url)
        {
            using (var client = new System.Net.Http.HttpClient())
            {
                client.DefaultRequestHeaders.ExpectContinue = false;
                var pageRequestJson = new System.Net.Http.StringContent(@"{'url':'" + url + "','renderType':'plainText','outputAsJson':false }");
                var response = client.PostAsync("https://PhantomJsCloud.com/api/browser/v2/SECRET_KEY/", pageRequestJson).Result;
                return response.Content.ReadAsStringAsync().Result;

            }
        }

这真的很简单,订阅该服务时有一个免费计划,每天允许500页。 SECRET_KEY将替换为您自己的密钥。

答案 3 :(得分:-1)

curl [-u login:pass] http://www.a_page.com | w3m -T text/html -dump

curl [-u login:pass] http://www.a_page.com | lynx -stdin -dump

答案 4 :(得分:-2)

查看此命令行IECapt.exe

答案 5 :(得分:-2)

它没有javascript支持,但在我需要从网页处理数据的情况下,lynx对我很有用。这样我就得到了(明文)渲染,并且不必像curl那样过滤原始的html标签。

lynx -nonumbers -dump -width=9999999 ${url} | grep ...  et cetera.