当前位置:首页 > 新闻资讯 >行业资讯 > 精写15篇,学会Python爬虫 -- (2)承接:解析网页

精写15篇,学会Python爬虫 -- (2)承接:解析网页

时间:2021-04-17  浏览量:634

在这里插入图片描述

文章目录

上图已魔法反爬,哈哈哈,想爬就爬呗,不拦着。

认识HTML源代码

说到解析网页,那么我们是不是要自己先认识一下这些个网页呢?

来看一下这个网页:

在这里插入图片描述

解析网页

来,我们就拿这个网页来探究一下它的构造,后面其他的网页都是共通的。

首先可以看见在网站的右侧,输入框有样式。在网页的左侧,也有一段有色彩的代码,这是如何肥四呢?

这也称标记,或者叫搜索,或者叫映射,爱怎样叫怎么叫,咱只应该了解左右两个有形状的地方是一一对应的。

那,要如何按照页面元素去搜索它对应的代码块儿呢,其实不难哈。

在这里插入图片描述

先点击我圈起来的地方,再至网站上单击对应的元素就能。

我们再把目光聚焦在右侧的代码上,可以看见这些的三角形。稍微思索一下,就明白这些三角形是上下级的关系吧。

在这里插入图片描述

这些三角形是可以伸缩的。我们把每个三角形以及它包括的所有内容叫做:标签。

(当然,有些没有三角形的也叫标签,比方说)

在这里插入图片描述

怎么看标签呢,以""为标签的结尾。

这时候就会有同级标签跟上下级标签的区别了,我习惯把他们之间的关系称谓为:父标签、子标签、兄弟标签或者祖标签。

这些概念在上面讲Xpath标签提取的之后会很重要,都长点记性哈。

认识Xpath

XPath 是一种将 XML 文档的层次结构表述为关系的方法。因为 HTML 是 由 XML 元素构成的,因此我们可以使用 XPath 从 HTML 文档中定位跟选择元素。

要说从网站源码中提取出数据来,那方法虽然不少的。比方说某些人动不动就上来一个正则表达式啊,本系列主干中不提正则表达式,最多作为“番外篇”加入。怎么简单怎么来嘛。

也有些人会用beautifulsoup,我初学的之后也有学这个库的,后来看到有很多的不便性,于是果断放弃了。

有源标签_有special price的标签_有没有下载flashfla源文件的免费网站

其实也没多少不便,就是学完Xpath之后如何看soup怎么不顺眼。

来看一下它们仨儿的性能对比哈:

抓取方法性能使用难度安装难度

正则

困难

内置模块

beautifulsoup

简单

简单(纯Python)

lxml

有源标签_有special price的标签_有没有下载flashfla源文件的免费网站

简单

不难

可以看出beautiful为什么慢了吧。在pycharm下,没有太多的安装困难啦。

Xpath使用流程

看完Xpath的性能优势时候,我们来看一下Xpath是怎样解析一个网页,并获得到我们所必须的数据的。

在这里插入图片描述

别急,我来解释一下这张图。

1、首先,导入Xpath支持的模块,位于lxml包里面的etree模块,如果用pycharm时出现“报错”,别管它,能运行的,历史遗留原因。
2、其次,获取网页源码,这里需要使用content方法来对获取到的网页数据进行转换,不能使用text。
3、接着,对转换出的数据进行编解码。不然会看到一堆的乱码。
4、HTML方法,没什么好说的。
5、xpath方法,这里需要传入参数为待提取标签的Xpath路径。关于这个路径,一会儿会讲。
6、批量提取,关于这个批量提取,一会儿也会讲。
7、没什么好说的了。

Xpath路径提取

在这里插入图片描述

打开谷歌浏览器,在标签上面有源标签,进行一次右击,点击那些“copy”,选择上面的“Copy Xpath”,没啥事儿的话就不要去“Copy Full Xpath”了。

这里我们统一使用谷歌浏览器。

这时候相对Xpath路径我们就获得了。

Xpath基本语法节选

Xpath的语法很多了,但是我们通常用不到那么多,没必要死记硬背,我帮他们挑一些常用的就好。

在这里插入图片描述

示例:

在这里插入图片描述

示例:

还有一个text()方法注意一下即可有源标签,没必要弄那么多的花里胡哨的。

Xpath函数封装

讲到这里Xpath部分也差不多了,我们来封装一下函数,并做一个小demo。

如果是应提取单个路径下的标签,采用下面方式即可:

def get_data(html_data,Xpath_path): '''
    这是一个从网页源数据中抓取所需数据的函数
    :param html_data:网页源数据 (单条数据)
    :param Xpath_path: Xpath寻址方法
    :return: 存储结果的列表
    '''    data = html_data.content
    data = data.decode().replace("", "") #删除数据中的注释
    tree = etree.HTML(data) #创建element对象    el_list = tree.xpath(Xpath_path) return el_list

如果是应从多个Xpath中提取数据,可以运用下面方式:

def get_many_data(html_data,Xpath_path_list): '''
    通过多个Xpath对数据进行提取
    :param html_data: 原始网页数据
    :param Xpath_paths: Xpath寻址列表
    :return: 二维列表,一种寻址数据一个列表
    '''
    el_data = []    data = html_data.content
    data = data.decode().replace("", "")
    tree = etree.HTML(data) for Xpath_path in Xpath_path_list:
        el_list = tree.xpath(Xpath_path)
        el_data.append(el_list)
        el_list = [] #安全起见就自己清理了吧 return el_data

有special price的标签_有源标签_有没有下载flashfla源文件的免费网站

至于要不要修修补补,就看个人喜好啦。

Xpath实操爬取小demo

我们来做一个小demo,获取

在这里插入图片描述

(图片更换过,不知道为啥就图片违规)

这里的热榜文本跟网址,并一一配对吧。

首先,我们审查以下网站:

在这里插入图片描述

学的快的人断定两个线索,有经验的人看出三个线索:

在这里插入图片描述

看到网址和文本是必须的,不过我们应一次性全部拿下,就必须查看其他的几个标签所在位置,然后,找到我们所必须的所有标签的最小公共祖宗标签。

在这里插入图片描述

将标签叠上去,我们很容易的发觉他们都处在

已标记关键词清除标记

上一篇: 重庆智能卡动态-电子标签信息-电子标签公司
copyright 2010 广州强盛智能科技有限公司 版权所有 备案:粤ICP备18068841号
电话:15992422229 销售一、13640293427 销售二、13660366684 销售三
邮箱:congseng@hotmail.com
地址:中国广东省广州市番禺区番禺大道北555号天安科技园总部中心14号楼二楼
技术支持:搜浪网络
声明:如果本站有使用不当的极限词汇,并非本站之意愿,本站郑重声明所有极限词汇全部作废