python—pyquery

python—pyqueryPyQuery"""强大又灵活的网页解析库pipinstallpyquery官方文档http://pyquery.readthedocs.io/API风格和前段jquery相似"""初始化字符串初始化html=”’<div><ul><liclass="item-0">first

大家好,又见面了,我是你们的朋友全栈君。

PyQuery

""" 强大又灵活的网页解析库 pip install pyquery 官方文档 http://pyquery.readthedocs.io/ API风格和前段jquery 相似 """

初始化

字符串初始化

html = ''' <div> <ul> <li class="item-0">first item</li> <li class="item-1"><a href="link2.html">second item</a></li> <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li> <li class="item-1 active"><a href="link4.html">fourth item</a></li> <li class="item-0"><a href="link5.html">fifth item</a></li> </ul> </div> '''
from pyquery import PyQuery as pq
doc = pq(html) # 创建一个对象
print(doc('li')) #传入css选择器,jQuery也是css选择器
# 选择id 就使用#
# 选择class 前面加.
# 标签名 什么也不加,直接传

URL初始化

# 自动请求url,把得到的html传递给函数
from pyquery import PyQuery as pq
doc = pq(url='http://www.baidu.com') 
print(doc('head'))

文件初始化

from pyquery import PyQuery as pq
doc = pq(filename='demo.html')
print(doc('li'))

基本CSS选择器

""" 选择id 就使用# 选择class 前面加. 标签名 什么也不加,直接传 """
html = ''' <div id="container"> <ul class="list"> <li class="item-0">first item</li> <li class="item-1"><a href="link2.html">second item</a></li> <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li> <li class="item-1 active"><a href="link4.html">fourth item</a></li> <li class="item-0"><a href="link5.html">fifth item</a></li> </ul> </div> '''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('#container .list li'))

#这里我们需要注意的一个地方是doc('#container .list li'),这里的三者之间的并不是必须要挨着,只要是层级关系就可以,

常用CSS选择器方法

class .color 选择class=’color’内的所有元素
#id #info 选择id=’info’的所有元素
* * 选择所有元素
element p 选择所有的p元素
element,element div,p 选择所有div和p元素
element element div p 选择所有div内的p元素
[attribute] [target] 选择所有带target属性的元素
[attribute=value] [target=_blank] 选择target=”_blank”的所有元素

查找元素

from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
print(type(items))
print(items)
lis = items.find('li') # 向里面查找li
print(type(lis))
print(lis)

# 查找子元素
li = items.children() 
print(type(li))
print(li)


#父元素
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
container = items.parent()
print(type(container))
print(container)

#祖先元素
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
parents = items.parents()
print(type(parents))
print(parents)


# 兄弟元素
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.list .item-0.active')
print(li.siblings())

获取信息

# 获取属性
""" pyquery对象.attr(属性名) pyquery对象.attr.属性名 """
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.attr('href'))
print(a.attr.href)
""" <a href="link3.html"><span class="bold">third item</span></a> link3.html link3.html """



# 获取文本
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.text())
""" <a href="link3.html"><span class="bold">third item</span></a> third item """

# 获取html
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
print(li.html())

DOM操作

# 添加和删除属性

html = ''' <div class="wrap"> <div id="container"> <ul class="list"> <li class="item-0">first item</li> <li class="item-1"><a href="link2.html">second item</a></li> <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li> <li class="item-1 active"><a href="link4.html">fourth item</a></li> <li class="item-0"><a href="link5.html">fifth item</a></li> </ul> </div> </div> '''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.removeClass('active')
print(li)
li.addClass('active')
print(li)
""" <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li> <li class="item-0"><a href="link3.html"><span class="bold">third item</span></a></li> <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li> """

# 同样的我们可以通过attr给标签添加和修改属性,
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.attr('name', 'link')
print(li)
li.css('font-size', '14px')
print(li)

# remove
# 有时候我们获取文本信息的时候可能并列的会有一些其他标签干扰,这个时候通过remove就可以将无用的或者干扰的标签直接删除,从而方便操作
html = ''' <div class="wrap"> Hello, World <p>This is a paragraph.</p> </div> '''
from pyquery import PyQuery as pq
doc = pq(html)
wrap = doc('.wrap')
print(wrap.text())
wrap.find('p').remove()
print(wrap.text())
""" Hello, World This is a paragraph. Hello, World 其他DOM方法 http://pyquery.readthedocs.io/en/latest/api.html """

伪类选择器

html = ''' <div class="wrap"> <div id="container"> <ul class="list"> <li class="item-0">first item</li> <li class="item-1"><a href="link2.html">second item</a></li> <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li> <li class="item-1 active"><a href="link4.html">fourth item</a></li> <li class="item-0"><a href="link5.html">fifth item</a></li> </ul> </div> </div> '''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('li:first-child')
print(li)
li = doc('li:last-child')
print(li)
li = doc('li:nth-child(2)')
print(li)
li = doc('li:gt(2)')
print(li)
li = doc('li:nth-child(2n)')
print(li)
li = doc('li:contains(second)')
print(li)

""" <li class="item-0">first item</li> <li class="item-0"><a href="link5.html">fifth item</a></li> <li class="item-1"><a href="link2.html">second item</a></li> <li class="item-1 active"><a href="link4.html">fourth item</a></li> <li class="item-0"><a href="link5.html">fifth item</a></li> <li class="item-1"><a href="link2.html">second item</a></li> <li class="item-1 active"><a href="link4.html">fourth item</a></li> <li class="item-1"><a href="link2.html">second item</a></li> 更多CSS选择器可以查看 http://www.w3school.com.cn/css/index.asp """
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137570.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 一份简短又全面的数学建模技能图谱:常用模型&算法总结

    本文总结了常用的数学模型方法和它们的主要用途,主要包括数学和统计上的建模方法,关于在数学建模中也挺常用的机器学习算法暂时不作补充,以后有时间就补。至于究竟哪个模型更好,需要用数据来验证,还有求解方法也不唯一,比如指派问题,你可以用线性规划OR动态规划OR整数规划OR图与网络方法来解。总的来说,常用主成分分析来降维,综合评价的方法有因子分析法、层次分析法、….,用蒙特卡罗方法来随机模拟求解;…

    2022年4月7日
    83
  • Http请求工具

    Http请求工具

    2021年6月19日
    82
  • 镁光闪存颗粒对照表_详解闪存颗粒的种类

    镁光闪存颗粒对照表_详解闪存颗粒的种类固态硬盘的存储颗粒从目前来看主要分为SLC,MLC,TLC,QLC.这四种存储颗粒的区别主要体现在那方面,以下我们就从价格,使用寿命,应用场合来划分.SLCMLCTLCQLC示意图SLC:单层次存储单元SLC=Single-LevelCell,即1bit/cell,速度快寿命最长,价格贵(约MLC3倍以上的价格),约10万次擦写寿命.是目前使用寿命最高的颗粒,由于价格贵,产能少,…

    2022年6月22日
    100
  • 音乐标签修改器——Mp3tag

    音乐标签修改器——Mp3tagMp3tag用于编辑音频文件元数据:批量标签编辑、在线数据库查询、根据标签信息重命名文件

    2022年7月25日
    12
  • 一位华裔复活了美国奥数国家队:掌舵 6 年 4 次夺冠,打破中国队“垄断”

    一位华裔复活了美国奥数国家队:掌舵 6 年 4 次夺冠,打破中国队“垄断”来源:量子位罗博深,一个复活了美国奥数国家队的男人。△图源:QuantaMagazine在他的执教下,美国奥数国家队迎来了黄金时期。过去六年中,共获得了4个国际奥数竞赛(IMO)第一名(…

    2022年6月20日
    47
  • bigdecimal除法运算保留两位小数_bigdecimal保留两位小数显示00

    bigdecimal除法运算保留两位小数_bigdecimal保留两位小数显示00**问题:**将两个long类型的数相除后转换为BigDecimal类型并保留两位小数。思路:1.先将long转换为double类型再相除2.相除之后再转换为BigDecimal类型3.最后是设置小数位数,并设置两位小数后面的数的处置方式。代码:longnum1=5L;longnum2=20L;BigDecimalnum=BigDecimal.valueOf((double)num1/num2).setScale(2,BigDecimal.ROUND_HALF_UP);

    2022年9月23日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号