PHP Web抓取Javascript生成的内容
在我的项目中,我被困在一个清理任务中 我想从$html中的链接中获取数据,tr和td的所有表内容,这里我试图获取链接,但它只显示javascript:self.close()PHP Web抓取Javascript生成的内容,php,html,web-scraping,Php,Html,Web Scraping,在我的项目中,我被困在一个清理任务中 我想从$html中的链接中获取数据,tr和td的所有表内容,这里我试图获取链接,但它只显示javascript:self.close() 通常,此类页面加载一组Javascript(jQuery等),然后构建接口并从数据源检索要显示的数据 因此,您需要做的是在Firefox或类似的浏览器中打开该页面,使用Firebug等工具查看实际执行的请求。如果幸运的话,可以直接在XHR请求列表中找到它。在这种情况下: http://www.govliquidation.
通常,此类页面加载一组Javascript(jQuery等),然后构建接口并从数据源检索要显示的数据 因此,您需要做的是在Firefox或类似的浏览器中打开该页面,使用Firebug等工具查看实际执行的请求。如果幸运的话,可以直接在XHR请求列表中找到它。在这种情况下:
http://www.govliquidation.com/json/buyer_ux/salescalendar.js
请注意,此操作过程可能会违反某些许可证或使用条款。在继续之前,请与网站管理员/数据源/版权所有者明确这一点:检测并禁止此类刮取非常容易,识别您的身份可能只是稍微少一点
无论如何,如果您在PHP中发出相同的调用,您可以使用非常简单的代码直接刮取数据(前提是没有会话/身份验证问题,这里似乎就是这样):
<?php
$url = "http://www.govliquidation.com/json/buyer_ux/salescalendar.js";
$json = file_get_contents($url);
$data = json_decode($json);
?>
您检索
$data->result->events
,对其转换为数组形式的项和Bob的叔叔使用fputcsv()
。通常,此类页面加载一组Javascript(jQuery等),然后构建接口并从数据源检索要显示的数据
因此,您需要做的是在Firefox或类似的浏览器中打开该页面,使用Firebug等工具查看实际执行的请求。如果幸运的话,可以直接在XHR请求列表中找到它。在这种情况下:
http://www.govliquidation.com/json/buyer_ux/salescalendar.js
请注意,此操作过程可能会违反某些许可证或使用条款。在继续之前,请与网站管理员/数据源/版权所有者明确这一点:检测并禁止此类刮取非常容易,识别您的身份可能只是稍微少一点
无论如何,如果您在PHP中发出相同的调用,您可以使用非常简单的代码直接刮取数据(前提是没有会话/身份验证问题,这里似乎就是这样):
<?php
$url = "http://www.govliquidation.com/json/buyer_ux/salescalendar.js";
$json = file_get_contents($url);
$data = json_decode($json);
?>
您检索
$data->result->events
,对其转换为数组形式的项使用fputcsv()
,以及Bob的叔叔。对于第二个站点,您有一个包含多个TR元素的表,并且希望捕获每个TR的前两个TD子项
通过检查源代码,您可以看到如下内容:
<tr>
<td> Allendale</td>
<td> Eastern Time
</td>
</tr>
<tr>
<td> Alpine</td>
<td> Eastern Time
</td>
有点像
$csv[] = strip(
html_entity_decode (
$td->innertext,
ENT_COMPAT | ENT_HTML401,
'UTF-8'
)
);
查看PHP手册页,了解关于字符集编码和实体处理的
html\u entity\u decode()。上面的方法应该有效——一个“应该”加50美分就能给你一杯咖啡:-)在第二个站点中,你有一个包含多个TR元素的表,你想要捕捉每个TR的前两个TD子元素
通过检查源代码,您可以看到如下内容:
<tr>
<td> Allendale</td>
<td> Eastern Time
</td>
</tr>
<tr>
<td> Alpine</td>
<td> Eastern Time
</td>
有点像
$csv[] = strip(
html_entity_decode (
$td->innertext,
ENT_COMPAT | ENT_HTML401,
'UTF-8'
)
);
查看PHP手册页,了解关于字符集编码和实体处理的html\u entity\u decode()。上述方法应该有效——一个“应该”加50美分就可以给你一杯咖啡:-)你用什么擦伤?请将您当前的代码添加到您的问题中,使用“代码”按钮格式化。嗯。。。这是一个不同于你之前引用的站点。我的解决方案不再适用,而您的解决方案现在也不起作用,因为在新页面中,您需要查找TR元素,而不是A元素。在该页面中,只有一个元素,它是您正在恢复的。你查过HTML源代码了吗?@iserni。。那么,如何抓住tr呢?@lserni:我很想把这个问题退回去,这样它就符合你的优秀答案了。然而,我不想妨碍你的持续援助:你怎么想?你用什么来解决你的困难?请将您当前的代码添加到您的问题中,使用“代码”按钮格式化。嗯。。。这是一个不同于你之前引用的站点。我的解决方案不再适用,而您的解决方案现在也不起作用,因为在新页面中,您需要查找TR元素,而不是A元素。在该页面中,只有一个元素,它是您正在恢复的。你查过HTML源代码了吗?@iserni。。那么,如何抓住tr呢?@lserni:我很想把这个问题退回去,这样它就符合你的优秀答案了。然而,我不想妨碍你的持续援助:你怎么看?
$csv[] = strip(
html_entity_decode (
$td->innertext,
ENT_COMPAT | ENT_HTML401,
'UTF-8'
)
);