5.1 动态网页示例
让我们来看一个动态网页的例子。示例网站有一个搜索表单,可以通过http://example.webscraping.com/search 进行访问,该页面用于查询国家。比如说,我们想要查找所有起始字母为A的国家,其搜索结果页面如图5.1所示。
图5.1
如果我们右键单击结果部分,使用Firebug查看元素(参见第2章),可以发现结果被存储在ID为“result”的div 元素中,如图5.2所示。
让我们尝试使用lxml 模块抽取这些结果,这里用到的知识在第2章和第3章的Downloader 类中都已经介绍过了。
>>> import lxml.html >>> from downloader import Downloader >>> D = Downloader() >>> html = D('http://example.webscraping.com/search') >>> tree = lxml.html.fromstring(html) >>> tree.cssselect('div#results a') []
图5.2
这个示例爬虫在抽取结果时失败了。检查网页源代码可以帮助我们了解抽取操作为什么会失败。在源代码中,可以发现我们准备抓取的div 元素实际上是空的,如下所示。
<div id="results"> </div>
而Firebug显示给我们的却是网页的当前状态,也就是使用JavaScript动态加载完搜索结果之后的网页。下一节中,我们将使用Firebug的另一个功能来了解这些结果是如何加载的。
什么是AJAX
AJAX是指异步JavaScript和XML(Asynchronous JavaScript and XML),于2005年引入,描述了一种跨浏览器动态生成Web应用内容的功能。更重要的是,`XMLHttpRequest`—这个最初微软为ActiveX实现的JavaScript对象,目前已经得到大多数浏览器的支持。该技术允许JavaScript创建到远程服务器的HTTP请求并获得响应,也就是说Web应用就可以传输和接收数据。而传统的客户端与服务端交互方式则是刷新整个网页,这种方式的用户体验比较差,并且在只需传输少量数据时会造成带宽浪费。
Google的Gmail和Google地图是动态Web应用的早期实验者,也对AJAX成为主流起到了重要帮助。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论