网站建站 公司,佛山网络,网站建设 python,电商设计年终总结1 PyQuery说明#xff1a;
PyQuery是python中一个强大而又灵活的网页解析库#xff0c;如果你觉得正则写起来太麻烦#xff0c;又觉得BeautifulSoup语法太难记#xff0c;如果你熟悉jQuery的语法那么#xff0c;PyQuery就是你绝佳的选择。
安装
pip3 install pyquery2 …1 PyQuery说明
PyQuery是python中一个强大而又灵活的网页解析库如果你觉得正则写起来太麻烦又觉得BeautifulSoup语法太难记如果你熟悉jQuery的语法那么PyQuery就是你绝佳的选择。
安装
pip3 install pyquery2 初始化
介绍三种初始化PyQuery的方法。
1.字符串初始化
html
divulli classitem-0first item/lili classitem-1a hreflink2.htmlsecond item/a/lili classitem-0 activea hreflink3.htmlspan classboldthird item/span/a/lili classitem-1 activea hreflink4.htmlfourth item/a/lili classitem-0a hreflink5.htmlfifth item/a/li/ul/divfrom pyquery import PyQuery as pq # 习惯写法用字母pq来代替PyQuery类doc pq(html) # 声明PyQuery对象doc传入html这个参数字符串
print(doc(li)) # 用css选择器来实现如果要选id前面加#如果选class前面加.如果选标签名什么也不加2. URL初始化
from pyquery import PyQuery as pq
docpq(urlhttp://www.baidu.com)#直接请求传入的url
print(doc(head))选择出了head标签
3.文件初始化
demo.html为本地文件
from pyquery import PyQuery as pq
docpq(filenamedemo.html)#指定文件名该文件在运行目录下
print(doc(head))3 基本CSS选择器
html
div idcontainerul classlistli classitem-0first item/lili classitem-1a hreflink2.htmlsecond item/a/lili classitem-0 activea hreflink3.htmlspan classboldthird item/span/a/lili classitem-1 activea hreflink4.htmlfourth item/a/lili classitem-0a hreflink5.htmlfifth item/a/li/ul/divfrom pyquery import PyQuery as pqdoc pq(html)
print(doc(#container .list li))
# 会查找id为container class为list标签为li的对象只是层级关系后者并非一定是前者的子对象
# 注意用空格隔开4 查找元素
查找子元素
html
div idcontainerul classlistli classitem-0first item/lili classitem-1a hreflink2.htmlsecond item/a/lili classitem-0 activea hreflink3.htmlspan classboldthird item/span/a/lili classitem-1 activea hreflink4.htmlfourth item/a/lili classitem-0a hreflink5.htmlfifth item/a/li/ul/div
from pyquery import PyQuery as pqdoc pq(html)
items doc(.list) # 拿到items里面选择了list类
print(type(items))
print(items)
lis items.find(li) # 利用find方法查找items里面的li标签得到的lis也可以继续调用find方法往下查找层层剥离
print(type(lis))
print(lis)也可以用**.children()**查找直接子元素
html
div idcontainerul classlistli classitem-0first item/lili classitem-1a hreflink2.htmlsecond item/a/lili classitem-0 activea hreflink3.htmlspan classboldthird item/span/a/lili classitem-1 activea hreflink4.htmlfourth item/a/lili classitem-0a hreflink5.htmlfifth item/a/li/ul/div
from pyquery import PyQuery as pqdoc pq(html)
items doc(.list)
lis items.children()
print(type(lis))
print(lis)
lis items.children(.active)
print(lis)查找父元素
html
div idcontainerul classlistli classitem-0first item/lili classitem-1a hreflink2.htmlsecond item/a/lili classitem-0 activea hreflink3.htmlspan classboldthird item/span/a/lili classitem-1 activea hreflink4.htmlfourth item/a/lili classitem-0a hreflink5.htmlfifth item/a/li/ul/divfrom pyquery import PyQuery as pqdoc pq(html)
items doc(.list)
container items.parent() # .parent()查找对象的父元素
print(type(container))
print(container)祖先节点
html
div classwrapdiv idcontainerul classlistli classitem-0first item/lili classitem-1a hreflink2.htmlsecond item/a/lili classitem-0 activea hreflink3.htmlspan classboldthird item/span/a/lili classitem-1 activea hreflink4.htmlfourth item/a/lili classitem-0a hreflink5.htmlfifth item/a/li/ul/div/divfrom pyquery import PyQuery as pqdoc pq(html)
items doc(.list)
# parents items.parents()#.parents查找所有的祖先节点
parent items.parents(.wrap) # 可以传入参数再次进行筛选
print(parent)兄弟元素
html
div classwrapdiv idcontainerul classlistli classitem-0first item/lili classitem-1a hreflink2.htmlsecond item/a/lili classitem-0 activea hreflink3.htmlspan classboldthird item/span/a/lili classitem-1 activea hreflink4.htmlfourth item/a/lili classitem-0a hreflink5.htmlfifth item/a/li/ul/div/div
from pyquery import PyQuery as pqdoc pq(html)
li doc(.list .item-0.active) # 空格表示下一层没有空格表示并列
print(li.siblings()) # .siblings()兄弟元素即同级别的元素不包括自己还可以从结果里再次进行筛选
html
div classwrapdiv idcontainerul classlistli classitem-0first item/lili classitem-1a hreflink2.htmlsecond item/a/lili classitem-0 activea hreflink3.htmlspan classboldthird item/span/a/lili classitem-1 activea hreflink4.htmlfourth item/a/lili classitem-0a hreflink5.htmlfifth item/a/li/ul/div/div
from pyquery import PyQuery as pqdoc pq(html)
li doc(.list .item-0.active) # 空格表示下一层没有空格表示并列
print(li.siblings(.active))5 遍历
如果查找的结果有多个元素并且你想对每一个都进行操作那么就要用到遍历了。遍历的关键就是items。
html
div classwrapdiv idcontainerul classlistli classitem-0first item/lili classitem-1a hreflink2.htmlsecond item/a/lili classitem-0 activea hreflink3.htmlspan classboldthird item/span/a/lili classitem-1 activea hreflink4.htmlfourth item/a/lili classitem-0a hreflink5.htmlfifth item/a/li/ul/div/divfrom pyquery import PyQuery as pqdoc pq(html)
lis doc(li).items() # .items会是一个生成器,可以用来遍历
print(type(lis))
for li in lis:print(li)6 获取信息
获取属性
html
div classwrapdiv idcontainerul classlistli classitem-0first item/lili classitem-1a hreflink2.htmlsecond item/a/lili classitem-0 activea hreflink3.htmlspan classboldthird item/span/a/lili classitem-1 activea hreflink4.htmlfourth item/a/lili classitem-0a hreflink5.htmlfifth item/a/li/ul/div/divfrom pyquery import PyQuery as pqdoc pq(html)
a doc(.item-0.active a) # 选出同时具备这item-0active两个信息的标签 空格表示这个标签内层的标签
print(a)
print(a.attr(href)) # a标签的href属性的内容也就是一个超链接
print(a.attr.href) # 另一种写法获取文本
html
div classwrapdiv idcontainerul classlistli classitem-0first item/lili classitem-1a hreflink2.htmlsecond item/a/lili classitem-0 activea hreflink3.htmlspan classboldthird item/span/a/lili classitem-1 activea hreflink4.htmlfourth item/a/lili classitem-0a hreflink5.htmlfifth item/a/li/ul/div/divfrom pyquery import PyQuery as pqdoc pq(html)
a doc(.item-0.active a) # 选出同时具备这item-0active两个信息的标签 空格表示这个标签内层的标签
print(a)
print(a.text()) # 获取该标签中的内容获取HTML
html
div classwrapdiv idcontainerul classlistli classitem-0first item/lili classitem-1a hreflink2.htmlsecond item/a/lili classitem-0 activea hreflink3.htmlspan classboldthird item/span/a/lili classitem-1 activea hreflink4.htmlfourth item/a/lili classitem-0a hreflink5.htmlfifth item/a/li/ul/div/divfrom pyquery import PyQuery as pq
doc pq(html)
li doc(.item-0.active)#选中一个li标签
print(li)
print(li.html())#获得该标签中的html内容7 DOM操作
对节点进行一些操作。这部分有许多的API这里举一些例子。
addClass、removeClass
html
div classwrapdiv idcontainerul classlistli classitem-0first item/lili classitem-1a hreflink2.htmlsecond item/a/lili classitem-0 activea hreflink3.htmlspan classboldthird item/span/a/lili classitem-1 activea hreflink4.htmlfourth item/a/lili classitem-0a hreflink5.htmlfifth item/a/li/ul/div/divfrom pyquery import PyQuery as pqdoc pq(html)
li doc(.item-0.active)
print(li)
li.removeClass(active) # 删除active这个class属性
print(li)
li.addClass(active) # 增加
print(li)attr、css
html
div classwrapdiv idcontainerul classlistli classitem-0first item/lili classitem-1a hreflink2.htmlsecond item/a/lili classitem-0 activea hreflink3.htmlspan classboldthird item/span/a/lili classitem-1 activea hreflink4.htmlfourth item/a/lili classitem-0a hreflink5.htmlfifth item/a/li/ul/div/divfrom pyquery import PyQuery as pqdoc pq(html)
li doc(.item-0.active)
print(li)
li.attr(name, link) # 如果不存在就会向标签中添加一个内容为link的name属性如果存在那就改变之
print(li)
li.css(font-size, 14px) # 增加一个css
print(li)remove
看下面的一段html我们想要单独获得“Hello World”内容但是和他并列的还有另外的内容如果我们直接选中wrap标签然后.text那么会获取两段内容。这时候可以先用remove方法把不需要的并列内容删除掉。
html
div classwrapHello, WorldpThis is a paragraph./p/divfrom pyquery import PyQuery as pqdoc pq(html)
wrap doc(.wrap)
print(wrap.text())wrap.find(p).remove() # 找到p标签然后删除
print(wrap.text())其他DOM方法
其他DOM方法
伪类选择器
根据自身需要顺序之类的选择指定的标签。
html
div classwrapdiv idcontainerul classlistli classitem-0first item/lili classitem-1a hreflink2.htmlsecond item/a/lili classitem-0 activea hreflink3.htmlspan classboldthird item/span/a/lili classitem-1 activea hreflink4.htmlfourth item/a/lili classitem-0a hreflink5.htmlfifth item/a/li/ul/div/divfrom pyquery import PyQuery as pqdoc pq(html)
li doc(li:first-child) # 选择li标签中的第一个
print(li)
li doc(li:last-child)
print(li)
li doc(li:nth-child(2)) # 获取第2个li标签
print(li)
li doc(li:gt(2)) # 获取索引2个以后的li标签。注意索引是从0开始的
print(li)
li doc(li:nth-child(2n)) # 获取第偶数个的li标签
print(li)
li doc(li:contains(second)) # 查找包含second文本的li标签更多CSS选择器
更多CSS选择器