使用 Hpricot 抓取具有异步响应的页面
我正在尝试抓取页面,但初始响应正文中没有任何内容,因为内容是异步输入的,例如苹果网站上的搜索结果: http://www.apple.com/uk/search/?q=searching+for+something&sec= global
关于如何使用 hpricot 成功获取搜索结果有什么想法吗?
谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当您引用的搜索页面加载时,它会通过 javascript/ajax 向其他位置发出请求,然后填充搜索结果。这就是您在页面中看到的内容。 Hpricot 本身无法帮助您,因为它无法解释页面附带的 JavaScript 来获取实际的搜索结果列表。
现在,如果您感兴趣的是搜索结果,则需要分析一下进入该页面并输入搜索查询时会发生什么。页面中的一些 javascript 接受您的查询,并调用(通过 XMLHttpRequest 或类似的 AJAX 技术)Apple 服务器中的一些其他脚本。它实际上在数据库中进行搜索并返回结果。
我建议您使用 Firebug 插件安装 Firefox,或者使用其他方式查看页面及其 javascript 组件发送和/或接收的实际请求。您会看到,对于您引用的搜索页面,它获取两部分:首先,来自此 URL 的“精选”结果:
http://www.apple.com/global/scripts/search_featured.php?q=mac+mini§ion =global&geo=uk
请注意,搜索字符串位于“q”参数中。
其次,一长串结果列表来自这里:
http://www.apple.com/search/service/nph-search10?site=uk_www&filter=1&snum=50&q=mac+mini
这两个都是XML 文档;使用 Hpricot 解析这些 URL 可能会有更好的运气。
When the search page you refer to is loaded, it makes a request via javascript/ajax to some other location, then populates the search results. This is what you're seeing in the page. Hpricot itself can't help you here because it has no way to interpret the javascript that comes with the page in order to fetch the actual search results list.
Now, if what you're interested in are the search results, you'd need to analyze a bit what happens when you enter that page and type a search query. Some javascript in the page takes your query, and calls (via XMLHttpRequest or similar, AJAX techniques) some other script in Apple's server. This is the one that actually does the search in a database and returns the result.
I suggest you install Firefox with the Firebug plugin, or some other way of seeing the actual requests a page and its javascript components send and / or receive. You'll see that, for the search page you referred, it fetches two parts: First, the "featured" results that come from this URL:
http://www.apple.com/global/scripts/search_featured.php?q=mac+mini§ion=global&geo=uk
Notice the search string is in the "q" parameter.
Second, a long results list comes from here:
http://www.apple.com/search/service/nph-search10?site=uk_www&filter=1&snum=50&q=mac+mini
These both are XML documents; you might have better luck parsing these URLs with Hpricot.