ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

爬虫之PyQuery库的使用(八)

2021-06-16 17:58:04  阅读:222  来源: 互联网

标签:pq PyQuery doc 爬虫 li item html 使用 print


PyQuery 概念

在这里插入图片描述

初始化:
字符串初始化
html='''
<div>
    <ul>
          <li class="item-0">frist 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</a></li>	   
          '''
from pyquery import PyQuery as pq
doc=pq(html)
print(doc("li"))
url初始化
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')#这里的demo.html是已经保存好的html文件
print(doc("li"))
css选择器

#代表id .代表class

html='''
<div id="container">
    <ul class="list">
          <li class="item-0">frist 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</a></li>	   
          '''
from pyquery import PyQuery as pq
doc=pq(html)
print(doc('#container .list li'))#表示id为container的节点,选择其内部的class为list的节点内部的所有li节点,然后打印输出
查找元素
查子元素
html='''
<div id="container">
    <ul class="list">
          <li class="item-0">frist 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</a></li>	   
          '''
from pyquery import PyQuery as pq
doc=pq(html)
items=doc(".list")
print(type(items))#<class 'pyquery.pyquery.PyQuery'>
print(items)
lis=items.find('li')#  查找ul下面的li元素
print(type(lis))
print(lis)

查找父元素
html='''
<div class="warp">
<div id="container">
    <ul class="list">
          <li class="item-0">frist 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</a></li>	   
          '''
from pyquery import PyQuery as pq
doc=pq(html)
items=doc(".list")
print(type(items.parent()))
print(items.parent())# 把直接父节点也打印出来
print(items.parents())# 把外层的所有节点   分别   都给打印处出来;返回所有的祖先节点
print(items.parents(".warp"))   # 将指定的曾祖父打印处理,就不会像parents一样打印多种情况
查找兄弟节点
html='''
<div class="warp">
<div id="container">
    <ul class="list">
          <li class="item-0">frist 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</a></li>	   
          '''
from pyquery import PyQuery as pq
doc=pq(html)
li=doc(".list .item-0.active")
print(li.siblings())
print("**************")
print(li.siblings(".active"))
遍历
单个元素
html='''
<div class="warp">
<div id="container">
    <ul class="list">
          <li class="item-0">frist 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</a></li>	   
          '''
from pyquery import PyQuery as pq
doc=pq(html)
li=doc(".list .item-0.active")
print(li)
# 打印结果:
#<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>  
多个元素
html='''
<div class="warp">
<div id="container">
    <ul class="list">
          <li class="item-0">frist 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</a></li>	   
          '''
from pyquery import PyQuery as pq
doc=pq(html)
li=doc("li").items()# 就会生成一个迭代器  <class 'generator'>
print(type(li))
for i in li:
    print(i)
获取信息
获取属性
doc=pq(html)
a=doc(".item-0.active a")
print(a)
print(a.attr("href"))
print(a.attr.href) #与前面的等价
获取文本
doc=pq(html)
a=doc(".item-0.active a")
print(a)
print(a.text())
print(a.text('heelo'))#为其中添加text属性的值
获取html
doc=pq(html)
li=doc(".item-0.active")
print(li)
print(li.html('<span>changed item</span>'))#为其中添加html属性的值

DOM操作
doc=pq(html)
li=doc(".item-0.active")
print(li)
li.removeClass('active')#移除节点中的active
print(li)
li.addClass('active')#添加节点中的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> 

参考文档:
链接: 参考文档:.

修改和增加 css,attr属性
from pyquery import PyQuery as pq
doc=pq(html)
li=doc(".item-0.active")
li.attr('name','link')#  如果属性中有name了,就会用link覆盖原来的值
print(li)
li.css('font-size','14px')
print(li)
#打印结果:
#<li class="item-0 active" name="link"><a href="link3.html"><span class="bold">third item</span></a></li>        
          
#<li class="item-0 active" name="link" style="font-size: 14px"><a href="link3.html"><span class="bold">third item</span></a></li>     
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

伪类选择器
html='''
<div>
    <ul>
          <li class="item-0">frist 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</a></li>	   
          '''
from pyquery import PyQuery as pq
doc=pq(html)
li=doc('li:first-child')
print(li)
print("---------1-------")
li=doc('li:last-child')
print(li)
print("---------2-------")
li=doc('li:nth-child(2)')
print(li)
print("----------3------")
li=doc('li:gt(2)')#大于2编号以后的内容
print(li)
print("----------4------")
li=doc('li:contains(second)')#获取包含second的
print(li)
print("----------------")
#---------1-------
#<li class="item-1 active"><a href="link4.html">fourth</a></li>     
          
#---------2-------
#<li class="item-1"><a href="link2.html">second item</a></li>    
          
#----------3------
#<li class="item-1 active"><a href="link4.html">fourth</a></li>     
          
#----------4------
#<li class="item-1"><a href="link2.html">second item</a></li>    
          
----------------

标签:pq,PyQuery,doc,爬虫,li,item,html,使用,print
来源: https://blog.51cto.com/u_15270205/2908806

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有