-
【Python爬虫】:Xpath表达式的使用
假设我爬取了这样的一个html网页,前面的前端代码如下所示:
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>OK资源采集-最新影视资源大全</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="keywords" content="OK资源采集-最新影视资源大全" /> <meta name="description" content="OK资源采集-最新影视资源大全" /> <script>var SitePath='/',SiteAid='10',SiteTid='',SiteId='';</script> <link href="/template/okokzy/css/home.css" rel="stylesheet" type="text/css" /> <script src="/template/okokzy/js/jquery_ldg.js"></script> <script src="/template/okokzy/js/jquery.zclip.min.js"></script> <script src="/template/okokzy/js/ldg.js"></script> <script src="/js/jq/jquery.lazyload.js"></script> <script src="/template/okokzy/js/home.js"></script> </head>
我们想要获取其中的script标签后面的内容,因此我们可以使用Xpath来获取,假设我们想要获得第一个script标签处的值value,就可以使用表达式:
Xpath(/html/head/script/text())[0]
这个表达式的含义是输出在html下的head下的第一个script标签处的文字,因为我们前面的代码:
Xpath(/html/head/script/text())
会输出所有以script开头的对象,因此加上[0]限定为第一个script后面的文字。
因此输出为:
var SitePath='/',SiteAid='10',SiteTid='',SiteId='';
在Xpath表达式当中'//' 表示前面的省略不计,直接跳过两层或者多层拿到后面的标签中所对应的对象。
二.标签属性的使用
假设我们想要爬取font标签当中具备某个color属性的文字内容,如下所示:
<font color="#000000">OK资源站 </font><font color="#FF0000">HTTPS</font><font color="#000000"> 站请进入>>></font></a></font><font size=
font这个标签之后显然会有很多不同的color,但是我们只想要这里color为“#000000”后面的文字内容,因此我们使用这样的表达式:
r_two=tree.xpath('//font[@color="#000000"]/text()')
这样就饿可以了。整体的代码如下所示:
import requests from lxml import etree post_url = 'https://www.okzy10.com/' #cookie='lastCity=100010000; __zp_stoken__=ce26bZyQcLhoDK1A7M0RzPzMQEDJzHHpAQCJkUHtpSSFDSCkNeko0HBZxSywqeBxlHh8PIE4CLwgTSWsacwcdbEMNUBBzE2APASkfAktgOFskSn9HCTgkLmE7GFxecS8MGE4FGX99IHdsQHV5YQ%3D%3D; __c=1610949395; __g=-; __l=l=%2Fwww.zhipin.com%2F&r=https%3A%2F%2Fwww.google.com%2F&g=&s=3&friend_source=0&s=3&friend_source=0; __a=13532184.1600828409.1610683874.1610949395.205.23.3.205; Hm_lvt_194df3105ad7148dcf2b98a91b5e727a=1610082805,1610683875,1610949395,1610949407; Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a=1610949407' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', } #解析本地的html #使用etree.parse #解析网页上的html #使用etree.HTML req = requests.get(post_url,headers=headers) #print(req.text) with open('ok_resource.html','w',encoding='utf-8') as fp: fp.write(req.text) #使用xpath表达式对etree对象进行解析 parser = etree.HTMLParser(encoding="utf-8") tree=etree.parse('ok_resource.html',parser=parser) r=tree.xpath('/html/head/script/text()')[0] r_two=tree.xpath('//font[@color="#000000"]/text()') print(r) print(r_two)
文章出处:https://www.cnblogs.com/geeksongs/p/14343194.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
JavaScript判断两个数组相等的四类方法
js如何操作video标签
React实战--利用甘特图和看板,强化Paas平
【记录】正则替换的偏方
前端下载 Blob 类型整理
抽象语法树AST必知必会
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程