2013-09-27 234 views
1

我在做一个PHP爬虫来探​​索名为alza.cz的电子商店。我想链接到该电子商店中的所有产品。我在地址:http://www.alza.cz/notebooky/18842920.htm。,但这只显示前21项。要获得所有项目,我必须去地址:http://www.alza.cz/notebooky/18842920.htm#f&pg=1/10000文件获取内容params

爬行程序使用file_get_contents获取页面的HTML,然后使用DOM解析页面的HTML。问题是,它看起来像file_get_contents忽略#(仅返回前21项而不是全部)之后的那部分。有任何想法吗?

+0

这两个链接都会为我返回'403 - 禁止:访问被拒绝'错误。 –

+0

两个链接都会给出403错误 – bansi

+0

似乎没关系。抓取本网站时的问题是,无论您获得下一组项目(“21dalších...”还是普通分页程序),它都会使用AJAX请求,而不是常规页面访问。因此,您需要通过AJAX进行探索 - 您是否拥有可用于确定如何执行此操作的实时AJAX查看器(在您的浏览器中)? – halfer

回答

1

file_get_contents会忽略该URL的#xxxxx部分(fragment identifier),并且不会将其包含在请求的URL中。这是用户代理在客户端使用的东西 - 最有可能的是,该网站有一些使用AJAX加载结果页面的Javascript。

您可以看到,如果页面服从Google AJAX Crawling Specification,虽然基于您的示例,但它看起来不像它。如果您看到像#!foo=bar这样的“散列爆炸”片段标识符,那是一个好兆头。

因此,您需要观察Firebugsimilar中的AJAX请求,并自行复制相同的请求。