欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python爬虫学习笔记(pyquery)

程序员文章站 2022-05-08 18:27:56
...
from pyquery import PyQuery as pq

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><lli>
<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>
'''
doc = pq(html) #字符串初始化为pq对象
print(doc('li')) #传入li节点以获取

doc1 = pq(url='https://baidu.com') #请求url并完成HTML的初始化
print(doc1('title'))#获取

doc2 = pq(filename='demo.html') #初始化本地文本
print(doc2('li'))

print(doc('#container .list li')) #选取id为container,再选取其内部的list类中的所有li节点
print(type(doc('#container .list li'))) #pyquery类型

#常用查询函数,与jQuery中函数的用法完全相同
#find()方法传入CSS选择器查找子节点
items = doc('.list') #选取类为list的节点
print(items)
lis = items.find('li') #传入CSS选择器,选取其内部所有子孙节点的所有li节点
print(lis)
#如果只查找子节点中的
lis1 = items.children('.active') #选取子节点中的特定节点
print(lis1)

#查找直接父节点
container = items.parent() #如果是parents()则是查找所有祖先节点;如果再传入CSS选择器就可以查找特定的祖先节点:items.parents('.***')
print(container)
#兄弟节点
li = doc('.list .item-0.active')
print(li.siblings()) #可以加入CSS选择器选取特定兄弟节点li.siblings(’。active)

#节点转化成字符串
print(str(li))

#遍历,生成器
lis1 = doc('li').items()
for li in lis1:
    print(li,type(li))

#获取属性
a = doc('.item-0.active a')
print(a,type(a))
print(a.attr('href')) #,获得死一个属性,等价于a.attr.href
#获得所有属性
a1 = doc('a')
for item in a1.items():
    print(item.attr('href'))
    print(a1.text()) #获取文本

li1 = doc('.item-0.active')
print(li.html()) #获取li节点中包含的HTML代码,遍历获取所有

li1.removeClass('active') #移除li节点中的active属性
li1.addClass('active') #添加li节点中的active属性
li1.attr('name','link') #修改名称为name的属性值为link
li1.text('change item')#修改节点内容
li1.html('<span>change item</span>') #修改<span>节点内容

#移除某个节点
li.remove('a')#移除li节点中的a节点

#伪类选择器
li2 = doc('li:first-child') #选择第一个li
li3 = doc('li:last-child') #选择最后一个li
li4 = doc('li:nth-child(2)') #选择第二个li
li5 = doc('li:gt(2)') #选择第三个li节点之后的节点
li6 = doc('li:nth-child(2)') #偶数位置的节点
li7 = doc('li:contains(second)') #包含second文本的li节点