mpe*_*pen 2 html php web-scraping
我正试图抓取一些HTML(经作者许可).我正在使用这里建议的PHP库,它运行良好,直到我遇到一个如下所示的链接:
<a href="javascript:__doPostBack('dgItem$_ctl2$_ctl0','')">
Run Code Online (Sandbox Code Playgroud)
我认为这是一些asp.net的事情.当我点击它时,它不会改变URL,它只是将一些新内容加载到页面中,我也想抓一下.
我怎么能绕过这个?
我想我需要模拟点击,但在处理原始HTML时我不能这样做,我需要某种浏览器/ JS解释器,不是吗?
是否有更适合此任务的库?我不仅限于PHP,但它是首选.
__doPostBack()确实是一个ASP.NET的东西.这是函数的作用:
var theForm = document.forms['FORMNAME'];
if (!theForm) {
theForm = document.FORMNAME;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,它将两个隐藏字段(__EVENTTARGET和__EVENTARGUMENT)的值设置为参数的相应值.然后它提交表格.
如果您愿意,可以继续使用PHP HTML解析器来完成这项工作,但是当您遇到其中一个__doPostBack()链接时,您必须手动制作POST请求.从高层次来看,你会看到这样的事情:
input元素等,并将值添加到数组中.如果在页面上没有文本框,复选框,等等,你只应留下的隐藏字段.NET嵌入在默认情况下(如__VIEWSTATE,__EVENTVALIDATION等).doPostBack()并覆盖现有值__EVENTTARGET和__EVENTARGUMENT.或者,如果您总是向同一页面发出几乎相同的请求,则可以跳过解析表单的一些步骤,然后直接跳转到制作POST请求.
这不会有很多乐趣,但它适用于这种情况.如果你需要处理涉及JS的更复杂的案例,或者你只是想以不同的方式处理它,那么(如你所提到的)库基本上可以驱动浏览器并为你处理这些事情.首先想到的两个是:
还有其他选项,但我不知道任何可以快速轻松地集成到现有PHP脚本中的选项.