python中获取网页元素
python中获取网页元素
一、方法概括
xml/html文本: 正则表达式re、xpath
json文件:jsonpath模块、正则表达式re
二、通用方法
使用所有方法获取页面元素都是需要先请求获取数据(爬虫),对返回数据进行分析,获取数据通过 request.get/post ( … ) 方法,并接收返回数据。
语法:
response = request(url, headers=headers, proxies=proxies, ...)
其中 response 是用来接收返回值的变量
url 为需要请求页面的地址
headers 是发送请求的请求头,一般必须添加 ‘user_agent’ 元素,其他选加
proxies 是使用网络代理来避免反爬,一般有 http/https/socks ,其中socks既可以使用 http 也可以使用 https
三、使用正则表达式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中获取网页元素相关推荐
- python获取网页元素坐标_html网页元素在屏幕上的坐标获取
今天在用python调用IE获取html网页元素在屏幕上的坐标,当然为了截图啦,(*^__^*) 嘻嘻-- xtop=ie.document.forms[i].elements[j].getBound ...
- (干货)你知道python爬虫定位网页元素有几种方式嘛,今天带你一一了解。
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:拓荒者 ( 想要学习Python?Python学习交流 ...
- javascript中获取dom元素高度和宽度
javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight ...
- python Chrome + selenium自动化测试与python爬虫获取网页数据
一.使用Python+selenium+Chrome 报错: selenium.common.exceptions.SessionNotCreatedException: Message: sessi ...
- 如何在Python中获取文件创建和修改日期/时间?
我有一个脚本,该脚本需要根据文件创建和修改日期执行一些操作,但必须在Linux和Windows上运行. 在Python中获取文件创建和修改日期/时间的最佳跨平台方法是什么? #1楼 最好的功能是os. ...
- python 检测文件编码_[常用] 在Python中检测网页编码
[常用] 在Python中检测网页编码 在使用Python抓取网页并进行分析时出现这个错误: UnicodeDecodeError: 'utf8' codec can't decode byte 0x ...
- C# webbrowser 获取网页元素 示例代码
在应用webbrowser对网页进行自动化操作时,不能有效地获取网页元素,往往是后续编程的拦路虎,原因是webbrowser提供的GetElementById().GetElementFromPoin ...
- Python爬虫获取网页编码格式
Python爬虫获取网页编码格式 网页编码格式是每个网页规定的本页面文字的编码方式,其中比较流行的是ascii, gbk, utf-8, iso等.观察许多网页的编码格式都是在meta标签的conte ...
- js中获取dom元素高度
目录 1.dom元素的宽高 2.鼠标事件中的常用高度宽度: 3. 总结: 4.参考博客: 1.dom元素的宽高 javascript中获取dom元素高度和宽度的方法如下: 网页可视区域宽: docum ...
- Python中获取异常(try Exception)信息
Python中获取异常(try Exception)信息 参考文章: (1)Python中获取异常(try Exception)信息 (2)https://www.cnblogs.com/hixiao ...
最新文章
- 坚持不懈,直到成功-I will persist. I will win.
- 鸿蒙系统2020正式版,鸿蒙2.0来了!华为开发者大会HDC 2020宣布
- 三连击(升级版)(洛谷-P1618)
- merry chrismas
- svn 分支上新增文件合并发生冲突_SVN使用:分支合并及解决冲突详解
- linux驱动面试题2018(面试题整理,含答案)
- xy苹果助手未受信任_苹果应用掉证书?突然打不开怎么办?
- 老婆背着我在豆瓣发帖:没事别嫁程序员!
- MYSQL使用MHA实现主从复制高可用、Galera Cluster介绍、压力测试、my.cnf配置参考
- Acetal-PEG-NHS,NHS-PEG-Acetal,乙缩醛-聚乙二醇-琥珀酰亚胺酯化学试剂供应
- linux java性能监控工具_常用Linux 性能监测工具
- ERROR [KafkaApi-1] Number of alive brokers ‘1‘ does not meet the required replication factor ‘2‘ for
- gsm模块网站服务器,GPRS模块与GSM模块的七大区别
- 头脑风暴 指导与管理项目工作 问题日志 项目管理信息系统 变更请求 习题
- 又该订报刊杂志了,你想定什么呢?
- Selenium IDE使用指南一(爬虫脚本录制器)
- ug建模文本怎么竖着_UG三维建模一个文字模型,换个角度竟然是一个新的文字!...
- JS三元运算符判断多个条件
- 『矩阵论笔记』张量CP分解的详细数学推导以及Python实现
- 使用ChatGPT前应当学会提问
热门文章
- 基于php的心理测试,据说是韩国最受欢迎的心理测试~~
- unity 生成和识别二维码
- opencv--normalize函数详解
- 禅与 JavaScript 编程艺术, Zen and The Art of JavaScript Programming
- python上方菜单栏不见了如何恢复_我的电脑”上方的工具栏不见了怎么处理?
- Git Bash复制粘贴快捷键失效问题
- 7-4 韩信点兵 (10 分)
- 又一个好用的xbox360手柄驱动
- python实时监控网站更新_Python监控Github项目更新并自动下载
- 产品思维训练 | 卖菜的店同时也卖水果,卖水果的店为什么不卖菜?