网页源代码抓取工具(【知识点】如何认识HTML源代码说到解析网页?)
优采云 发布时间: 2022-03-20 06:00网页源代码抓取工具(【知识点】如何认识HTML源代码说到解析网页?)
文章目录
上图已经神奇反转了,哈哈哈,想爬就爬,别拦着。
识别 HTML 源代码
说到解析网页,是不是需要我们自己先了解这些网页呢?
看看这个页面:
解析网页
来,我们就拿这个网页来研究一下它的结构。其余网页是通用的。
首先,可以看到在网页的左侧,输入框是彩色的。在网页的右侧,还有一个颜色代码,这个胖四是怎么回事?
这称为标记、搜索或映射,无论您想如何称呼它。我们只需要知道左右两个颜色的地方是一一对应的。
那么,如何根据页面元素查找对应的代码块其实并不难。
先点击我圈出来的地方,然后点击网页上对应的元素。
当我们专注于右边的代码时,我们可以看到很多三角形。稍微想一想,你就会知道那些三角形是上下层的关系。
这些三角形是可扩展的。我们称每个三角形及其收录的所有内容为:标签。
(当然有些没有三角形的也叫标签,比如)
如何查看标签,以“”作为标签的结尾。
这时候就会有兄弟标签和从属标签的区别。我习惯称它们之间的关系:父标签、子标签、兄弟标签、祖先标签。
这些概念在稍后讨论 Xpath 标记提取时将非常重要,因此请记住。
了解 Xpath
XPath 是一种将 XML 文档的层次结构描述为关系的方法。因为 HTML 是由 XML 元素组成的,所以我们可以使用 XPath 从 HTML 文档中定位和选择元素。
实际上有很多方法可以从网页源代码中提取数据。例如,有些人动不动就想出一个正则表达式。正则表达式在本系列的主干中没有提到,但最多是作为“附加文章”添加的。这是多么容易。
有些人还使用beautifulsoup。当我还是初学者时,我也学习了这个库。后来发现有很多不便,所以决定放弃。
其实并没有太大的不便,就是学了Xpath之后怎么看汤不顺眼。
我们来看看他们三者的性能对比:
爬取方式
表现
使用困难
安装难度
常规的
快的
困难
内置模块
美丽的汤
慢
简单的
简单(纯 Python)
lxml
快的
简单的
不难
你可以看到为什么美丽是缓慢的。在pycharm下,安装难度不大。
Xpath使用过程
看完Xpath的性能优势,我们再来看看Xpath是如何解析网页并获取我们需要的数据的。
别着急,让我来解释一下图片。
1、首先,导入Xpath支持的模块,位于lxml包里面的etree模块,如果用pycharm时出现“报错”,别管它,能运行的,历史遗留原因。<br />2、其次,获取网页源码,这里需要使用content方法来对获取到的网页数据进行转换,不能使用text。<br />3、接着,对转换出的数据进行编解码。不然会看到一堆的乱码。<br />4、HTML方法,没什么好说的。<br />5、xpath方法,这里需要传入参数为待提取标签的Xpath路径。关于这个路径,一会儿会讲。<br />6、批量提取,关于这个批量提取,一会儿也会讲。<br />7、没什么好说的了。
Xpath 路径提取
打开谷歌浏览器,在标签顶部右键,点击“复制”,在里面选择“复制Xpath”。如果没有问题,不要去“复制完整的 Xpath”。
这里我们统一使用谷歌浏览器。
这时候,我们就得到了相对的Xpath路径。
Xpath 基本语法摘录
Xpath 中有太多的语法,但我们一般不会用到那么多。无需死记硬背。我只为你挑选一些常用的。
例子:
还有一个text()方法需要注意,没必要做那么多花里胡哨的。
Xpath函数封装
现在Xpath部分已经差不多完成了,我们来封装函数,做一个小demo。
如果要提取单个路径下的标签,可以使用以下方法:
def get_data(html_data,Xpath_path):<br /> '''<br /> 这是一个从网页源数据中抓取所需数据的函数<br /> :param html_data:网页源数据 (单条数据)<br /> :param Xpath_path: Xpath寻址方法<br /> :return: 存储结果的列表<br /> '''<br /><br /> data = html_data.content<br /> data = data.decode().replace("", "") #删除数据中的注释<br /> tree = etree.HTML(data) #创建element对象<br /><br /> el_list = tree.xpath(Xpath_path)<br /> return el_list
如果要从多个 Xpath 中提取数据,可以使用以下方法:
def get_many_data(html_data,Xpath_path_list):<br /> '''<br /> 通过多个Xpath对数据进行提取<br /> :param html_data: 原始网页数据<br /> :param Xpath_paths: Xpath寻址列表<br /> :return: 二维列表,一种寻址数据一个列表<br /> '''<br /> el_data = []<br /><br /> data = html_data.content<br /> data = data.decode().replace("", "")<br /> tree = etree.HTML(data)<br /><br /> for Xpath_path in Xpath_path_list:<br /> el_list = tree.xpath(Xpath_path)<br /> el_data.append(el_list)<br /> el_list = [] #安全起见就自己清理了吧<br /><br /> return el_data
至于要不要刷,看个人喜好了。
Xpath实践爬取小demo
做个小demo,搞定
(图片已被替换,不知道为什么图片不合法)
这里是热榜文字和网址,一一匹配。
首先,我们查看以下页面:
学得快的可以看到两条线索,有经验的可以看到三条线索:
URL和文字都可以看,但如果我们想一次性全部拿走,我们需要查看其他几个标签的位置,然后找到我们需要的所有标签中最小的共同祖先标签。
通过堆叠标签,我们可以很容易地看到它们都在
上一篇:【从零开始,学Python爬虫不再难!!!】栏目介绍 |
下一篇:从零开始,学Python爬虫不再难!!!--(1)简介:初识爬虫,打基础丨储能方案