业界动态
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/ , 查看更多   
最新文章
OMEN暗影精灵MAX强势登场,解锁硬核玩家高能装备
2025年3月28日 ,惠普游戏家族2025重磅新品 —— OMEN暗影精灵 MAX于新品解密直播震撼发布,通过全方位实测展示,为玩家解锁新品
越传越离谱,张慧仪怒了要验DNA,邓兆尊隔空道歉:肯定不是她
最近的娱乐圈,真是风波不断,各种真真假假的传闻满天飞。这不,前段时间邓兆尊在网台节目里爆了个猛料,说某女星同时交往六位富
2024模拟二战的策略游戏有哪些 超受欢迎的二战题材手游二战游戏手机游戏「2024模拟二战的策略游戏有哪些 超受欢迎的二战题材手游」
本期要与小伙伴们一起分享的是模拟二战的策略游戏,这类手游不仅为各位玩家最大程度地还原了二战战场,还能让玩家在游戏中尽情发
苹果iwatch怎么连接android手机?苹果手表可以连接安卓手机吗「苹果iwatch怎么连接android手机?」
可以。点击手机里的设置选项。搜索蓝牙功能。再把蓝牙功能打开之后,用蓝牙搜索iwatch的蓝牙。搜索到它的型号之后。点击连接。这
小米手机宣布最新代言人,顺便曝光了小米9后置三摄和前置指纹小米9手机「小米手机宣布最新代言人,顺便曝光了小米9后置三摄和前置指纹」
今天一早,雷军发微博曝光了小米9的发布会日期,这一款小米手机的年度旗舰将在2月20日发布。对于这台新旗舰,小米官方的评价是“
百亿基金+百万落户奖+免费住房!珠海向全球海归发英雄帖
南都讯 4月1日,欧美同学会第四届“双创”大赛启动仪式暨媒体推介会在珠海高新区香山会议中心举行。此次大赛首次在粤港澳大湾区
关于2024年春节前后寄递服务的消费提示手机号查顺丰快递「关于2024年春节前后寄递服务的消费提示」
春节将至,为做好节日期间寄递服务保障工作,各邮政、快递企业依据业务实际情况,对网络运营进行了适当调整。企业将根据不同区域
面对“王羲之杜甫李时珍轮流骂我”的局面,就这样一笑而过?
AI正以前所未有的态势,“重塑”着我们的认知与生活。这不,最近各大短视频平台上AI复活历史文化名人的现象,再度引发人们的热议
So easy!电脑手机玩转DLNA Wifi音箱播放玩转手机「So easy!电脑手机玩转DLNA Wifi音箱播放」
本文来自网友广东第一恶霸分享在最数码论坛的文章://piebbs.pconline.com.cn/topic-85016.html  已经很难想象没有Wifi的世界
华为模拟器ensp怎么安装_华为模拟器怎么安装华为手机模拟器「华为模拟器ensp怎么安装_华为模拟器怎么安装」
大家好,又见面了,我是你们的朋友全栈君简单介绍一下 eNSP: eNSP是一款由提供的免费的图形化网络仿真工具平台,它将完美呈现真

loading