python 爬虫前奏二 pyquery的使用

1、初始化

字符串初始化

doc = pq(html)

文件初始化

doc = pq(filename='demo.html')
#但是需要修改pyquery的源码
if 'filename' in kwargs:
    #html = open(kwargs['filename'])
    html = open(kwargs['filename'], "r", encoding="utf-8")

URL初始化

doc = pq(url='http://cuiqingcai.com')
#等同于
doc = pq(requests.get('http://cuiqingcai.com').text)

 2、查找

全篇以此文档为模板

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>
 <div class="s-main-slot s-result-list s-search-results sg-row">
    <div data-asin="" data-index="0" data-uuid="123" data-component-type="" class="list1">
         <li class="item-10">first item</li>
         <li class="item-11"><a href="link2.html">second item</a></li>
         <li class="item-10 active"><a href="link3.html"><span class="bold">third item</span></a></li>
         <li class="item-11 active"><a href="link4.html">fourth item</a></li>
         <li class="item-10"><a href="link5.html">fifth item</a></li>
     </ul>
 </div>
'''

class=""前面加. id前面加# 标签前面不用加例如 li ul,同一个class的属性追加.

以单个class的单一属性做为筛选条件

doc = pq(html)
main_list = doc('.s-main-slot').items()
count = 0
for ml in main_list:
    print(ml)

以单个class的多属性做为筛选条件

main_list = doc('.s-main-slot.s-result-list2.s-search-results').items()
for ml in main_list:
    print(ml)

以多个class的多属性做为筛选条件

main_list = doc('.s-main-slot.s-result-list2.s-search-results .list2').items()

class和id和标签一起做为筛选条件

main_list = doc('#container .list  li').items()

找到符合筛选条件的子节点

#所有子孙节点
items = doc('.list')
lis = items.find('li')
#子节点
lis = items.children()
print(lis)
#需要使用子节点的话
lis = items.children().items()

找到符合筛选条件的父节点

#直接父节点
items = doc('.list')
container = items.parent()
#祖先节点
items = doc('.list')
parents = items.parents()

找到符合节点的兄弟节点

li = doc('.list .item-0.active')
print(li.siblings())
#添加筛选条件
print(li.siblings('.active'))

遍历

lis = doc('li').items()
for li in lis:
    print(li, type(li))

获取信息

a = doc('.item-0.active a')
print(a, type(a))
print(a.attr('href'))
#print(a.attr.href)
#当多节点时,需要遍历读取
for item in a.items():
    print(item.attr('href'))

获取文本

text()则返回了所有的li节点内部的纯文本,中间用一个空格分割开,即返回结果是一个字符串。

a = doc('.item-0.active a')
print(a.text())

获取HTML文本

html()方法返回的是第一个li节点的内部HTML文本,如果得到的结果是多个节点,并且想要获取每个节点的内部HTML文本,则需要遍历每个节点

li = doc('.item-0.active')
print(li.html())

节点操作

li = doc('.item-0.active')
li.removeClass('active')
li.addClass('active')

attr,text,html

attr()方法只传入第一个参数的属性名,则是获取这个属性值;如果传入第二个参数,可以用来修改属性值。text()和html()方法如果不传参数,则是获取节点内纯文本和HTML文本;如果传入参数,则进行赋值。

text()方法,传入文本之后,li节点内部的文本全被改为传入的字符串文本了

html()方法传入HTML文本后,li节点内部又变为传入的HTML文本了。

li.attr('name', 'link')
li.text('changed item')
li.html('<span>changed item</span>')

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值