业界动态
Python爬虫进阶——Xpath解析数据 并 爬取一个IP池
2024-12-16 15:21

老早以前写过一个用python的request包的爬虫文章,那里面我使用正则表达式去对信息进行筛选,今天我们来学习一种更简便的解析数据、筛选信息的方法,利用Xpath,并且了解了基本语法后,我们来爬取一个IP池。

Python爬虫进阶——Xpath解析数据 并 爬取一个IP池

 

 

 

 

 


XPath,全称 XML Path Language,即 XML 路径语言,它是一门在XML文档中查找信息的语言。XPath 最初设计是用来搜寻XML文档的,但是它同样适用于 HTML 文档的搜索。它也是是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。因此,对 XPath 的理解是很多高级 XML 应用的基础。

 

一些术语(可以参考XML的知识方便理解

1. 在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。

2. 基本值(或称原子值,Atomic value)是无父或无子的节点。

3. 项目(Item)是基本值或者节点。

 

 

基本语法

表达式描述nodename选择这个节点名的所有子节点/从当前节点选择直接子节点//从当前节点选取子孙节点.选择当前节点…选取当前节点的父节点@选取属性

 

实例

表达式结果

node

选取 node元素的所有子节点。

/node

选取根元素 node。假如路径起始于 / ,则此路径始终代表到某元素的绝对路径,就像Linux里的路径规则。

node/bit

选取属于 node 的子元素的所有 bit 元素。

//node

选取所有 node 子元素,而不管它们在文档中的位置。

node//bit

选择属于 node 元素的后代的所有 bit 元素,而不管它们位于 node 之下的什么位置。

//@lang

选取名为 lang 的所有属性。

 

谓语(Predicates

谓语用来查找某个特定的节点或者包含某个指定的值的节点。

谓语被嵌在方括号中。

表达式结果

/bookstore/book[1]

选取属于 bookstore 子元素的第一个 book 元素。

/bookstore/book[last()]

选取属于 bookstore 子元素的最后一个 book 元素。

/bookstore/book[last()-1]

选取属于 bookstore 子元素的倒数第二个 book 元素。

/bookstore/book[position()<3]

选取最前面的两个属于 bookstore 元素的子元素的 book 元素。

//title[@lang]

选取所有拥有名为 lang 的属性的 title 元素。

//title[@lang=’eng’]

选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。

/bookstore/book[price>35.00]

选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。

/bookstore/book[price>35.00]/title

选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

这里感谢这位兄台总结的表——https://cuiqingcai.com/2621.html

 

 


首先我们在Pycharm的终端运行命令来安装lxml,这里为了学习Xpath先安装lxml

 

我们可以先来简单的小试牛刀

 

输出

 

注解

上面的 etree.HTML() 是将字符串解析为html文档并对HTML文本进行自动修正。

而后面的 etree.tostring() 输出修正后的结果,类型是bytes。

另外上面的道理读取html文件也是可以的

 
 
 

如果想要获得所有tbody的节点,只要修改上面的xpath即可

 
 

还是在上面程序的基础上进行修改,修改xpath里的匹配规则

比如我想要获得tbody节点下的tr的直接子节点

 

如果是所有子孙的tr节点

 
 

结合上面说的,加一个谓语即可

 

如上所示,获取所有 li节点 且要求具有属性 class=”item-0″

 

利用 .. 即可往上翻一层

例如获取tr的父节点

 

也可以用 节点轴——parent::* 来获取父节点

 
 

其实更常用的操作还是获取文本信息

我们用 XPath 中的 text() 方法可以获取节点中的文本

例如上面的html文件中,有两个td节点,里面分别有一些字符串,我们现在来获取他们

 
 

另外,有的时候我们可以直接用 // 加 text() 的方式获取,这样可以爬到最全面的文本信息,但是可能会夹杂一些换行符等特殊字符。所以还是定位的越细致越好。

 

获取li节点的属性

 
 
 

例如上面的html文件中有这样的一句

 

我们要经过 li 节点去获取内部的 first item 文本

这时就可以用到 contains() 函数了

 

这样只要li节点还有属性 class,且属性有值sp即可被匹配

 

当一个节点有多个属性

 

利用Xpath的运算符即可

 

下面是Xpath的常见运算符

运算符描述实例返回值|计算两个节点集//book | //cd返回所有拥有 book 和 cd 元素的节点集+加法6 + 410–减法6 – 42*乘法6 * 424div除法8 div 42=等于price=9.80如果 price 是 9.80,则返回 true。

 

如果 price 是 9.90,则返回 false。

!=不等于price!=9.80如果 price 是 9.90,则返回 true。

 

如果 price 是 9.80,则返回 false。

<小于price<9.80如果 price 是 9.00,则返回 true。

 

如果 price 是 9.90,则返回 false。

<=小于或等于price<=9.80如果 price 是 9.00,则返回 true。

 

如果 price 是 9.90,则返回 false。

>大于price>9.80如果 price 是 9.90,则返回 true。

 

如果 price 是 9.80,则返回 false。

>=大于或等于price>=9.80如果 price 是 9.90,则返回 true。

 

如果 price 是 9.70,则返回 false。

or或price=9.80 or price=9.70如果 price 是 9.80,则返回 true。

 

如果 price 是 9.50,则返回 false。

and与price>9.00 and price<9.90如果 price 是 9.80,则返回 true。

 

如果 price 是 8.50,则返回 false。

mod计算除法的余数5 mod 21

感谢w3school运算符

 


基本语法就先记录到这里了,感谢这位CSDN的带翅膀的猫

另外这个谷歌插件也是很不错——XPath Helper
按住shift选择我们需要的内容,自动生成匹配规则

或者更简单的,在审查元素里找到你要的资源右击,选择Copy,就可以直接copy这个节点的xpath

 


下面的例子仅供参考

我们找到一个免费ip代理网站,这个其实还蛮好找的

我们先来确定网页是静态网页还是动态:如果是静态,那网页源代码里的数据就是呈现给你的数据,即网页的任何数据都是在源代码中可以找到的,它的url地址对应的就是导航栏中的地址。

我们这个网站是个静态网站,好,我直接把url记录到python代码中

在网页中我们在审查元素的network里(刷新一下)得到UA头,来伪造我们的爬虫是浏览器

 

接下来我们使用requests模块的get去发送请求

 

一般没问题的就会发现它成功把网页源代码打印了出来

,现在咱们就要利用Xpath去解析数据,把需要的数据筛出来,首先我们先安装parsel库

 or 

然后在代码中导入

 

对于该网站的html中,我们需要的数据就是 IP、IP端口、协议类型 ,这三个字段

最后我们要弄成这样{“协议类型”:”IP:IP端口”}

每一个IP信息在审查元素中都是这样

,利用这样的Xpath即可得到每个tr标签内的信息

 

此时,parse_list就是一个列表,我们再用for循环遍历,将每一个代理IP作为一个字典存到一个集合中

 

好了,这一页的代理IP就全被我们采集了

 

那要采集多页呢?我们调动数据之后发现不同的页的区别其实就是在URL中的最后数字的变化,好,我们再做个大循环,将刚才的数据做到循环里面

 

最后输出

 

,接下来我们来对 proxies_list 进行筛选高质量的IP

再定义一个方法

 

最后全部的代码如下

 
 

 

不错吧,一共60个IP,56个质量不错

爬取到的数据可以存放到数据库中,例如MongoDB数据库(非关系型数据库,无需建字段

好了,IP池就搭建完成

 


 

 

 

 

博客:is-hash.com

商业转载 请联系作者获得授权,非商业转载 请标明出处,谢谢

    以上就是本篇文章【Python爬虫进阶——Xpath解析数据 并 爬取一个IP池】的全部内容了,欢迎阅览 ! 文章地址:http://www78564.xrbh.cn/news/30346.html 
     文章      相关文章      动态      同类文章      热门文章      栏目首页      网站地图      返回首页 迅博思语移动站 http://www78564.xrbh.cn/mobile/ , 查看更多   
最新文章
颜霸邝玲玲,我的泰娱新老婆
看到邝玲玲的第一眼多数人就能明白为什么她可以在中国收获超高人气。中泰混血的她脸上没有泰系常见的钝感,五官流畅、大气、明艳
6G进入标准化元年 通信专家建议重点挖掘垂直行业需求
3月27日至31日,2025中关村论坛年会在京举行。期间,中国工程院院士张平,中关村泛联院院长、中国移动研究院院长黄宇红,中关村
三星手机重装系统攻略:五步轻松恢复出厂设置三星手机系统「三星手机重装系统攻略:五步轻松恢复出厂设置」
简介:在现代智能手机的使用中,重装系统或恢复出厂设置是解决许多软件问题的有效手段。对于三星手机用户,重装系统可以帮助清理
买全球吃全球 感受“舌尖上”的消博会
中国青年报客户端讯(中青校媒记者 田恒慧 中青报·中青网见习记者 戴瑶 记者 任明超)4月13日,第五届中国国际消费品博览会(简
仰天长叹,山东男篮0:2出局:落寞爆冷,克里斯成难掩的心痛短板
CBA季后赛12进8,首战失利的山东男篮,客场挑战北控男篮。对于山东男篮来说,球队已经没有任何的退路,如果再输,那么本赛季就提
新奥好彩免费资料大全-精选解释解析落实酷派5855手机「新奥好彩免费资料大全-精选解释解析落实」
新奥好彩是一款在中国颇受欢迎的彩票游戏,借助现代科技和大数据分析技术,为广大玩家提供了丰富的购彩体验与相应的策略指导。随
这家“药厂”,专治年轻人不开心
中国精酿啤酒市场,正经历舶来品的本土化蜕变。中国酒业协会数据显示,啤酒行业保持高增长,反弹性增长态势明显。《2024—2029年
理想星环OS开源,到底意味着什么?
3月27日,董事长兼CEO李想在2025中关村论坛年会上宣布开源理想汽车自研汽车操作系统——理想星环OS。上述消息在一定范围内引起热
春节送父母vivo Y200t:超高性价比手机只需873元,功能惊艳!vivo性价比最高的手机「春节送父母vivo Y200t:超高性价比手机只需873元,功能惊艳!」
春节来临,买新手机送父母成为不少子女的新年选择。在这个团圆的节日里,送一份陪伴和实用的礼物无疑能带来更多的幸福感。尤其是
爱高集团盘中最低价触及0.181港元,创近一年新低
截至4月16日收盘,(00328.HK)报0.192港元,较上个交易日下跌7.69%,当日盘中最低价触及0.181港元,创近一年新低。资金流向方面