xPath,beautifulsoup和pyquery
一、XPath
from lxml import etree
html = etree.parse('html源代码',etree.HTMLPaser())
1.节点的获取
a.html.xpath('//*') #匹配HTML中的所有节点
b.html.xapth('//li') #匹配所有的li节点
c.// 获取所有的子孙节点 ‘/’ 获取子节点(区别好 '//' 与 '/')
d.html.xapth('//li[@class='item-0']') #根据属性匹配
e.html.xapth('//li[contains(@class,'li')]) #属性多值匹配 contains()方法,第一个参数传入属性名称,第二个参数传入属性值,只要此属性包含所传入的属性值就可以完成匹配
f.多属性匹配 .html.xapth('//li[contains(@class,'li') and @name='item'])
g.按顺序选择 html.xapth('//li[last()]') 最后一个li节点
html.xapth('//li[position()<3]') 位置小于3的li节点
html.xapth('//li[1]') 选择第一个li节点
h.节点轴选择 html.xapth('//li/child::') 直接子节点
html.xapth('//li/ancestor::') 所有祖先节点
html.xapth('//li'/attribute::) 获取所有的属性值
html.xapth('//li/decendant::') 获取所有的子孙节点
2.属性,文本获取
(1).文本获取
html.xapth('//li/text()')
(2).属性获取
html.xapth('//li/@class') #获取li标签的class的属性值
二、BeautifulSoup
1.节点选择器
直接调用节点名称就可以选择节点元素,在调用string属性就可以得到节点内的文本
eg:soup.title.string
a.提取信息:可以通过name属性获得节点的名称 soup.title.name
b.获取属性:每个节点有多个属性,比如 id,class等。选择这个节点元素之后,可以调用attrs获取所有的属性 soup.p.attrs
soup.p.attrs[‘name’] 获取属性name的值 另一种简单的方式:soup.p['name']
c.获取内容:soup.p.string 获取p标签的内容
2.嵌套选择:比如我们之前获取了head的节点元素,我们可以继续调用head来选去head的内部元素
3.关联选择
a.子节点与子孙节点: soup.p.contents 获取p标签元素的所有直接子节点,返回的是列表
soup.p.children 也是返回p标签元素的所有直接子节点, 不过返回的是生成器
soup.p.descendants 返回p标签的所有的子孙节点,返回的是生成器
b.父节点和祖先节点
soup.p.parent 返回的是p标签的直接父节点
soup.p.parents 返回的是p标签的所有祖先节点,返回的是生成器
c.兄弟节点
soup.p.next_slibling 返回的是节点的下一个节点
soup.p.next_sliblings 返回的是下面的所有的兄弟节点,返回的是生成器
soup.p.previous_slibling 返回的是上一个兄弟节点
soup.p.previous_slibling 返回的是上面的所有的兄弟节点,返回的生成器
4.方法选择器
a.find_all() 查找所有符合的元素,返回的是列表 find_all(name,attrs,recursive,tetxt,**kwargs)
name:根据节点名称查询元素 soup.find_all(name='ul') 查询文档树中所有的ul的标签元素
attrs:根据属性查询节点 soup.find_all(attr={'id':'list-1'}) 查询文档树中所有id属性值为‘list-1’的元素
text: 根据文本查询节点 传入的的形式可以是字符串,也可以是正则表达式对象 soup.find_all(text=re.compile('link')) 查询文本中所有含link的标签元素
b.find() find 返回的生死单个元素,也就是匹配的第一个元素,方法同find_all()
c. find_parents(),find_parent(),find_next_siblings(),find_next_sibling(),find_previous_siblings(),find_next_sibling(),find_all_next(),find_next(),find_all_prevous(),find_privous()
这一组方法都是和find_all()与find()一致
5.CSS选择器
使用CSS选择器时,只需要调用select() 方法,传入相应的CSS选择器即可
soup.select('CSS选择器')
三、pyquery
import pyquery as pq
doc = pq(html文档or url)
1.基本CSS选择器
doc('CSS选择器')
2.查找节点
a.查找子节点:find()方法 find()方法查找的是所有的子孙节点,如果只想查找子节点,可以用children()方法;find()或者children()方法直接传入CSS选择器即可
b.查找父节点:parent() 查询直接父节点,parents() 查找祖先节点 都是传入CSS选择器即可
c.兄弟节点:siblings() 筛选摸个兄弟节点可以传入CSS选择器
3.遍历:对于多个节点的结果,就需要遍历,需要调用items()方法 doc('li').items() 遍历所有的li标签元素
4.获取信息
a.获取属性 提取到节点之后,就可以调用attr()方法获取属性 doc('.item-0.active a').attr('href')
也可以通过调用attr属性来获取属性 doc('.item-0.active a').attr.href (说明:当返回结果包含多个节点时,调用attr()方法智慧得到第一个属性值)
b获取文本内容:调用text()方法 doc('.item-0.active a').text()
c.获取HTML文本 ,调用html()方法 doc('.item-0.active a').html()
5.节点操作
a.addClass(),removeClass() 动态的改变节点的class的属性值
b.attr,text,html 修改属性值,文本内容,html文本
doc('.item-0.active a').attr('name','link'); doc('.item-0.active a').text('changed item'); doc('.item-0.active a').html('<span> change item</span>')
c.remove 移除,可以将特定的节点移除 doc('.item-0.active a').remove()
6.伪类选择器(举例说明):
a. li = doc('li:first-child')
b. li = doc('li:last-child')
c. li = doc('li:nth-child(2)')
d. li = doc('li:gt(2)')
e .li = doc('li:nth-child(2n)')
f. li = doc('li:contain(second))
好了就写到这了!!!!!!!!!!!!!!!!!!!!!!!
xPath,beautifulsoup和pyquery的更多相关文章
- 四大解析器(BeautifulSoup、PyQuery、lxml、正则)性能比较
用标题中的四种方式解析网页,比较其解析速度.当然比较结果数值与电脑配置,python版本都有关系,但总体差别不会很大. 下面是我的结果,lxml xpath最快,bs4最慢 ==== Python v ...
- 02 爬虫数据解析之re,xpath,beautifulsoup
一.正则匹配 简单用法演示: 字符: print(re.findall(".","abccc31223dn哈哈")) ### . 匹配除了换行符以外的任意字符, ...
- 使用beautifulsoup和pyquery爬小说
# -*- coding:UTF-8 -*- from bs4 import BeautifulSoup #BeautifulSoup就是处理字符串的工具 import requests, sys & ...
- Python3 BeautifulSoup和Pyquery解析库随笔
BeautifuSoup和Pyquery解析库方法比较 1.对象初始化: BeautifySoup库: from bs4 import BeautifulSoup html = 'html strin ...
- re,xpath,BeautifulSoup三种方法爬取古诗词网上诗歌
re,xpath ,bs4对同一个页面的解析速度发现re比xpath快接近10倍,xpath比bs4快接近10倍可见要想追求极致速度,使用正则表达式解析有多重要 1.re解析的代码 # 使用正则表达式 ...
- 解析库之re、beautifulsoup、pyquery
BeatifulSoup模块 一.介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Be ...
- 爬虫之解析库-----re、beautifulsoup、pyquery
一.介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你 ...
- 第三篇:解析库之re、beautifulsoup、pyquery
BeatifulSoup模块 一.介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Be ...
- 关于js渲染网页时爬取数据的思路和全过程(附源码)
于js渲染网页时爬取数据的思路 首先可以先去用requests库访问url来测试一下能不能拿到数据,如果能拿到那么就是一个普通的网页,如果出现403类的错误代码可以在requests.get()方法里 ...
随机推荐
- Java基础语法:注释
书写注释是一个非常好的习惯. 注释并不会被执行,是给我们写代码的人看的. Java中的注释有三种: 单行注释(Line comment) 多行注释(Block comment) 文档注释(JavaDo ...
- Go | Go 结合 Consul 实现动态反向代理
Go 结合 Consul 实现动态反向代理 代理的核心功能可以用一句话概括:接受客户端的请求,转发到后端服务器,获得应答之后返回给客户端. Table of Contents 反向代理 实现逻辑 Go ...
- 基于SaaS平台的iHRM项目的前端项目介绍
1.下载安装node.js 访问https://nodejs.org/en/,然后下载安装即可 2. 查看是否安装成功 打开cmd命令行,输入node -v 如果出现对应的版本号,即为安装成功 3.从 ...
- Python切换版本工具pyenv
目录 安装pyenv 安装与查看py版本 切换py版本 结合ide使用示例 和virtualenv的一些区别 参考文献 使用了一段时间,我发现这玩意根本不是什么神器,简直就是垃圾,安装多版本总是失败, ...
- apicloud编译所需的ios证书的获取方法
在我们通过apicloud或hbuilderX这些工具打包ios应用的时候,需要一个ios证书. 那么我们如何生成这个ios证书呢?网上介绍的方法都是需要使用mac电脑,然后用mac电脑的钥匙串访问的 ...
- SSM整合再回顾
一.spring 前言:提起spring就不得不说到它的IOC和AOP的概念.IOC就是一个对象容器,程序员可以将对象的创建交给spring的IOC容器来创建,不再使用传统的new对象方式,从而极大程 ...
- 因MemoryCache闹了个笑话
前言 是这么一回事: 我正在苦思一个业务逻辑,捋着我还剩不多的秀发,一时陷入冥想中...... 突然聊天图标一顿猛闪,打开一看,有同事语音: 大概意思是:同事把项目中Redis部分缓存换成Memory ...
- python基础学习之元组和字典的功能方法
什么是元组?(tuple) emmmmmm,这个没必要深究吧,就是一排'元素',一行 格式: a = (1,2,3,4,5,6,7,8,9)用小括号表示的,极为元组. 其有序,且不可更改,可以对比st ...
- BZOJ_2115 [Wc2011] Xor 【图上线性基】
一.题目 [Wc2011] Xor 二.分析 比较有意思的一题,这里也学到一个结论:$1$到$N$的任意一条路径异或和,可以是一个任意一条$1$到$N$的异或和与图中一些环的异或和组合得到.因为一个数 ...
- 2019看雪CTF 晋级赛Q2第四题wp
上次参加2019看雪CTF 晋级赛Q2卡在了这道题上,虽然逆出算法,但是方程不会解,哈哈哈哈,果然数学知识很重要呀,现在记录一下. 首先根据关键信息,根据错误提示字符串定位到这里: 1 int __t ...