返回介绍

3.3 抓取百度首页实例

发布于 2025-04-21 19:15:26 字数 3218 浏览 0 评论 0 收藏

这节用一个抓取百度首页的例子让读者深入理解 Requests 库和 XPath 语法知识,同时,通过这个例子讲解 Chrome 浏览器的检查工具。之所以选择抓取百度首页,是因为这个页面相对简单,非常有利于初学者理解下载网页、提取数据的整个过程。图 3-1 所示为百度首页页面。

图 3-1 百度首页页面

百度的首页元素很少,非常简洁。要抓取的目标内容就是右上角“新闻”链接的名称和其 URL。编写如下代码导入需要的库。

>>>import requests
>>>from lxml import etree 

使用 Requests 的 GET 方法获取百度的首页。

>>>response = requests.get('https://www.baidu.com/') 

用获取的文本形式 HTML 源码文件初始化 etree。

>>>response.encoding = 'utf-8'   #使用 utf-8 解码
>>>selector = etree.HTML(response.text) 

etree 提供了 HTML 这个解析函数,使得可以直接对 HTML 源码使用 XPath 语法查找。下面需要分析网页中要提取元素的 XPath 路径,可以使用 Chrome 浏览器帮助编写 XPath 路径。在百度页面空白处单击右键,在弹出的菜单中选择“检查”,页面下方弹出一个子页面(也可能出现在页面右边,可以通过单击子页面右上角竖着的 3 个点图标,以更改显示的位置),如图 3-2 所示。

图 3-2 Chrome 浏览器检查页面

在弹出的检查子页面左上角有一个选择箭头,用鼠标单击这个图标,让它变蓝色,这样就进入了选择状态,这时用鼠标单击页面中“新闻”这个栏目链接,下面的 Elements 代码就会定位到显示“新闻”这个链接的代码位置,如图 3-3 所示。

图 3-3 定位并显示“新闻”链接的代码

可以看到变蓝色的这一行代码正是“新闻”这个链接对应的 HTML 代码。现在可以分析这一行 HTML 代码,看看提取“新闻”这个栏目的名称(其实就是“新闻”两个字)和其 URL 的 XPath 路径应该怎么写。

查看变蓝色的这一行代码,可以发现这一行是一个<a>标签,需要的文本信息就在这个<a>标签里,而其 href 属性就是“新闻”栏目的 URL,所以只要定位到这个<a>标签,就能提取出来需要的信息。

Chrome 浏览器为编写 XPath 路径提供了一个极其方便的办法:可以在变蓝色的这一行代码上单击右键,然后选择 Copy 下的 Copy XPath,直接复制出这一行代码的 XPath 路径,如图 3-4 所示。

图 3-4 从 Chrome 浏览器复制 XPath

读者可能会疑惑,XPath 路径这么简单就复制下来了,前面讲解的内容是不是就没有用处了呢?当然不是,主要原因有如下几个。

(1)在很多复杂页面中,直接复制出来的 XPath 可能就是很长的一串带有序号的<div>和<ul>等标签组成的字符串,可读性和可扩展性很差。如果能通过观察,使用特别的属性来定位,编写的 XPath 路径扩展性强,不会因为页面之间的差异造成定位不准。

(2)第 7 章将讲到动态网页的抓取,如果在动态网页中直接复制 XPath,可能复制出来的 XPath 并不能定位到实际需要的元素,这就需要根据元素和属性的特点进行分析。

(3)可以通过比较复制的两个 XPath 路径之间的不同,编写相对路径,简化编写相对路径的工作。

现在已经从 Chrome 浏览器复制了 XPath 路径,它的形式是//*[@id="u1"]/a[1],这个路径的含义是:从根节点查找 id 属性等于 u1 的标签下的第一个<a>标签。读者可能会有疑问,id="u1"是否在整个页面中是唯一的?当然了,这个路径是完全没有问题的、可以用的,为了演示判断唯一性的技巧,下面就来验证一下。在百度首页单击右键,在弹出的菜单中选择“查看网页源码”,在新打开的页面中显示了整个 HTML 网页源码,如图 3-5 所示。若按下 Ctrl+F 组合键搜索 id="u1",就会发现这个属性的确是唯一的,可以通过这个属性直接定位到新闻所在的<div>标签。

图 3-5 百度首页源码

现在使用 text() 和 @href 提取出需要的信息。

>>>news_text = selector.xpath('//*[@id="u1"]/a[1]/text()')[0]
>>>news_url = selector.xpath('//*[@id="u1"]/a[1]/@href')[0] 
>>>print(news_text) 
新闻 
>>>print(news_url) 
http://news.baidu.com 

从打印结果可以看到,我们已经成功提取到了目标信息。

这一节通过一个非常简单的例子实践了抓取百度首页一个栏目名称和链接的过程。写得比较详细,主要是为了向读者展示整个分析的过程,读者要学会使用 Chrome 浏览器定位和分析页面元素。实际上,利用好 Chrome 浏览器“检查”这个功能,能大大提高编写爬虫的效率。后面的爬虫实例将多次使用 Chrome 浏览器来分析目标网站。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。