python中获取网页元素


一、方法概括

  1. xml/html文本: 正则表达式re、xpath

  2. json文件:jsonpath模块、正则表达式re

二、通用方法

使用所有方法获取页面元素都是需要先请求获取数据(爬虫),对返回数据进行分析,获取数据通过 request.get/post ( … ) 方法,并接收返回数据。

三、使用正则表达式re获取元素

1、获取 xml/html 或 json 文本 :

​ re正则表达式获取xml 或 json 文本时都需要使用 resuest 发送请求并接收数据

​ 然后用正则语法进行数据分析提取

2、re语法

1、re.match( ‘re语句’, str, flags=0 )

​ re.match 代表使用的re语句必须在字符串开头就匹配成功,否则就匹配失败;

​ 匹配成功返回匹配对象(element),失败则返回None。

2、re.search( ‘re语句’, str, flags=0 )

​ re.search 代表使用的re语句在整个字符串中匹配,匹配的到就匹配成功,否则就匹配失败;

​ 匹配成功返回匹配对象(element),失败则返回None。

3、re.findall( ‘re语句’, str, flags=0 )

​ re.search 代表使用的re语句在整个字符串中匹配,返回匹配成功的所有子串

​ 匹配成功返回list(…),失败则返回 空list。

4、re.split( ‘re语句’, str, maxsplit=0, flags=0 ) :字符串分割

​ re.split 功能:根据正则表达式匹配的子串对原字符串进行分割,返回分割后的列表

​ maxsplit :分割次数

5、正则表达式分组语法 :

​ (正则表达式) :将括号中的字符作为一个分组

​ (?P正则表达式) :name 为括号中分组的别名

分组的引用

​ /num :num表示第几个分组,默认从1开始:1,2,3 …

6、re.sub( ‘正则表达式’, repl, str, count=0, flags=0 ) : 字符串替换

​ repl :替换的字符串

​ str :被替换的原始字符串

​ count :替换的最大次数,默认为0代表全部替换

7、正则表达式修饰符 flags

​ 默认为 flags = 0 代表无修饰

​ flags = re.I :匹配时不区分大小写

​ flags = re.M :多行匹配,影响 ^ 和 $

​ flags = re.S :使 . 在匹配时匹配包括换行符在内的所有字符

3、使用步骤

​ 说明:使用re时要先导入re模块;然后使用需要的方法获取数据;

​ 注意:re 只作用于解码后 的字符串str

import reresponse = request(url, headers=headers)  -- 请求数据res = response.content.decode()           -- 对原数据转码need_data = re.search(r're语句', res)        -- 使用re获取数据

四、使用xpath获取元素

1、获取 xml/html 数据

​ xpath只能获取 xml/html 上的元素。使用步骤:①.在获取前需要通过 request 先获取页面数据;②.然后使用etree.HTML( )方法把字符串数据转成Element对象;③.再使用xpath语法筛选Element对象。

只有Element对象才可以使用 element.xpath(‘xpath字符串’) 获取数据

2、xpath语法

1、XML的每个标签称为节点,使用xpath进行选择时要从根节点开始遍历

2、查找节点:

路径表达式 结果
//title[@lang=‘eng’] 选择lang属性值为eng的所有title元素
/bookstore/book[1] 选择属于bookstore子元素的第一个book元素
/bookstore/book[last()] 选择属于bookstore子元素最后一个book元素
/bookstore/book[last()-1] 选择属于bookstore子元素的倒数第二个book元素
/bookstore/book[position()>1] 选择bookstore下面的book元素,从第二个开始选择
//book/title[text()=‘Harry Potter’] 选择所有book下的title元素,仅选择文本为Harry Potter的title元素
/bookstore/book[price>35.00]/title 选择bookstore元素中book元素的所有title元素,且其中的price元素的值须大于35

3、在xpath中,第一个元素的位置是1,最后一个元素的位置是 last( ),倒数第二个是last( ) - 1

3、使用步骤

说明:在python中使用xpath语法前,需要使用lxml中的 etree.HTML() 方法把请求获取的str类型的网页数据转换为Element对象类型,该对象类型可以使用自带的 .path( ) 方法获取相应数据

①、导入 etree 方法 : from lxml import etree

②、获取数据:

​ 注意:获取的原数据是bytes型,必须要先进行转码再转换

from lxml import etreeresponse = request(url, headers=headers)  -- 请求数据res = response.content.decode()              -- 对原数据转码html = etree.HTML(res)                    -- 把str转为element对象 need_data_list = html.xpath('xpath语法')   -- 使用 xpath语法获取数据

4、注意点

只要使用xpath语法得到的数据不是准确的内容,则返回的数据都是element对象;可以重复使用xpath直到获取准确的数据;只要是通过xpath方法得到的数据都是字符串str型的列表list。

五、使用jsonpath模块获取元素

1、获取json数据

​ json数据格式:json的一般数据格式是字典套字典

​ 例: my_dict = {“key1”: {“key2”: {“key3”: ‘一条数据’}}}

​ 使用jsonpath方法可以更简单地获取需要的json数据

2、jsonpath语法

JSONPath 描述
$ 表示根元素
@ 当前元素
. or [] 子元素
不管位置,选择符合条件的元素
* 匹配所有元素节点
[] 迭代器标示,可以在里面做简单的迭代操作,如数组下标、根据内容选值等。
[,] 支持迭代器做多选
?() 支持过滤操作
() 支持表达式计算

3、使用步骤

.首先需要在python中导入jsonpath模块;

.然后通过 request 获取 json 数据并接收;

.接收的变量中有个方法可以转换接收数据为dict格式(原本json中的数据就是字典套字典的格式);

.使用 jsonpath.jsonpath( ) 方法使用jsonpath语法获取需要的数据,且返回的数据格式为list

具体使用:

import jsonpath
import jsonresponse = request(url, headers=headers)  -- 请求数据res = response.json()                      -- 获取json数据 类型为 dictneed_data_list = jsonpath.jsonpath(res, 'jsonpath语法')  -- 获取符合要求的数据,数据类型为list

python中获取网页元素相关推荐

  1. python获取网页元素坐标_html网页元素在屏幕上的坐标获取

    今天在用python调用IE获取html网页元素在屏幕上的坐标,当然为了截图啦,(*^__^*) 嘻嘻-- xtop=ie.document.forms[i].elements[j].getBound ...

  2. (干货)你知道python爬虫定位网页元素有几种方式嘛,今天带你一一了解。

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:拓荒者 ( 想要学习Python?Python学习交流 ...

  3. javascript中获取dom元素高度和宽度

    javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight ...

  4. python Chrome + selenium自动化测试与python爬虫获取网页数据

    一.使用Python+selenium+Chrome 报错: selenium.common.exceptions.SessionNotCreatedException: Message: sessi ...

  5. 如何在Python中获取文件创建和修改日期/时间?

    我有一个脚本,该脚本需要根据文件创建和修改日期执行一些操作,但必须在Linux和Windows上运行. 在Python中获取文件创建和修改日期/时间的最佳跨平台方法是什么? #1楼 最好的功能是os. ...

  6. python 检测文件编码_[常用] 在Python中检测网页编码

    [常用] 在Python中检测网页编码 在使用Python抓取网页并进行分析时出现这个错误: UnicodeDecodeError: 'utf8' codec can't decode byte 0x ...

  7. C# webbrowser 获取网页元素 示例代码

    在应用webbrowser对网页进行自动化操作时,不能有效地获取网页元素,往往是后续编程的拦路虎,原因是webbrowser提供的GetElementById().GetElementFromPoin ...

  8. Python爬虫获取网页编码格式

    Python爬虫获取网页编码格式 网页编码格式是每个网页规定的本页面文字的编码方式,其中比较流行的是ascii, gbk, utf-8, iso等.观察许多网页的编码格式都是在meta标签的conte ...

  9. js中获取dom元素高度

    目录 1.dom元素的宽高 2.鼠标事件中的常用高度宽度: 3. 总结: 4.参考博客: 1.dom元素的宽高 javascript中获取dom元素高度和宽度的方法如下: 网页可视区域宽: docum ...

  10. Python中获取异常(try Exception)信息

    Python中获取异常(try Exception)信息 参考文章: (1)Python中获取异常(try Exception)信息 (2)https://www.cnblogs.com/hixiao ...

最新文章

  1. 坚持不懈,直到成功-I will persist. I will win.
  2. 鸿蒙系统2020正式版,鸿蒙2.0来了!华为开发者大会HDC 2020宣布
  3. 三连击(升级版)(洛谷-P1618)
  4. merry chrismas
  5. svn 分支上新增文件合并发生冲突_SVN使用:分支合并及解决冲突详解
  6. linux驱动面试题2018(面试题整理,含答案)
  7. xy苹果助手未受信任_苹果应用掉证书?突然打不开怎么办?
  8. 老婆背着我在豆瓣发帖:没事别嫁程序员!
  9. MYSQL使用MHA实现主从复制高可用、Galera Cluster介绍、压力测试、my.cnf配置参考
  10. Acetal-PEG-NHS,NHS-PEG-Acetal,乙缩醛-聚乙二醇-琥珀酰亚胺酯化学试剂供应
  11. linux java性能监控工具_常用Linux 性能监测工具
  12. ERROR [KafkaApi-1] Number of alive brokers ‘1‘ does not meet the required replication factor ‘2‘ for
  13. gsm模块网站服务器,GPRS模块与GSM模块的七大区别
  14. 头脑风暴 指导与管理项目工作 问题日志 项目管理信息系统 变更请求 习题
  15. 又该订报刊杂志了,你想定什么呢?
  16. Selenium IDE使用指南一(爬虫脚本录制器)
  17. ug建模文本怎么竖着_UG三维建模一个文字模型,换个角度竟然是一个新的文字!...
  18. JS三元运算符判断多个条件
  19. 『矩阵论笔记』张量CP分解的详细数学推导以及Python实现
  20. 使用ChatGPT前应当学会提问

热门文章

  1. 基于php的心理测试,据说是韩国最受欢迎的心理测试~~
  2. unity 生成和识别二维码
  3. opencv--normalize函数详解
  4. 禅与 JavaScript 编程艺术, Zen and The Art of JavaScript Programming
  5. python上方菜单栏不见了如何恢复_我的电脑”上方的工具栏不见了怎么处理?
  6. Git Bash复制粘贴快捷键失效问题
  7. 7-4 韩信点兵 (10 分)
  8. 又一个好用的xbox360手柄驱动
  9. python实时监控网站更新_Python监控Github项目更新并自动下载
  10. 产品思维训练 | 卖菜的店同时也卖水果,卖水果的店为什么不卖菜?