我正在尝试使用PHP一个接一个地解析一堆网页,但我注意到当我打开第一页时,以下页面的链接隐藏在javascript中。
无论如何,我可以继续解析下一个网页吗?如果网址加密了一个像“page = 2”这样的变量,我会以这种方式浏览它们,但网址是加密的。
-LPG
答案 0 :(得分:1)
基本上你有两个选择:
如果你想使用#1,你必须阅读他们的Javascript代码并弄清楚它是如何工作的。我无法真正解释它,因为它在很大程度上取决于他们的代码;你只需要知道Javascript和“grok”他们的代码。然后,让您的代码执行相同的逻辑以生成“下一页”URL。
如果他们的系统使用AJAX,你仍然可以模仿它(与click-upvote所说的相反)。为此,您只需使用Firebug Firefox扩展程序等工具,即可在“幕后”观看浏览器向服务器发送的内容。然后,让您的代码发送一个虚假的HTTP请求,模仿他们的AJAX请求。即使没有像Firebug这样的工具,你也可以这样做:只需通过查看Javascript代码来推断浏览器将发送的内容。但是,如果你使用像Firebug这样的东西,它会让事情变得更容易(而不是推断,你可以看到发送的内容)。
如果你想改用#1,你需要使用一个实际的浏览器(并使用像Selenium这样的程序以编程方式控制它),或者使用像Rhino这样的东西来运行Javascript。使用像Selenium这样的控制系统的实际浏览器可能是最简单的方法;然而,它会很慢,因为它受浏览器渲染页面等所需的时间限制。使用Rhino或类似的东西的解决方案会更快,但它还需要更多的工作(你必须解析HTML,包括所有相关的JS文件等),所以我建议只作为一个不得已。
答案 1 :(得分:0)
唯一的方法是编写一个解析javascript链接并跟随它们的正则表达式。这可能仅在页面的URL在javascript代码中时才有效,例如:
<a href="javascript:open('something/some_page.html');">Something</a>
而不仅仅是
<a href="javascript:open(someField.value);">Something</a>
因为在第二个例子中,你实际上必须使用PHP来处理javascript链接,这可能非常具有挑战性。
请注意,您必须创建特定于网站的正则表达式,因为每个网站的网址格式不同。因此,Cnn.com可能会将其网址格式设置为与Reddit.com
不同