Python爬虫入门:pyquery库基础
pyquery基础使用方法
- find 查找节点
- children 子节点
- parent 父节点
- parents 祖先节点
- siblings 兄弟节点
- items 获取内容项目
- attr 获取属性
- text 提取文本
- html 获取html文本
html = """
<div>
<ul class="list">
<li class="item-0">one</li>
<li class="item-1"><a href="www.csdn.net">two</a></li>
<li class="item-0" id="three"><span class="bold"><a href="www.baidu.com">three</a></span></li>
<li class="item-1 active"><a href="www.csdn.net">four</a></li>
<li class="item-0"><a href="www.csdn.net">five</a></li>
</ul>
</div>
"""
import requests
from pyquery import PyQuery as pq
doc = pq('https://www.qq.com')
print(doc('title'))
doc = pq(html)
print(doc.find('ul').children('.item-0'))
print('*'*20+'text'+'*'*20)
print(doc.find('ul').children('.item-0')[0].text)
print('*'*20+'parent'+'*'*20)
print(doc.find('ul').children('.item-0').parent())
print('*'*20+'parents'+'*'*20)
print(doc.find('ul').children('.item-0').parents())
print('*'*20+'siblings'+'*'*20)
print(doc.find('ul').children('.item-1.active').siblings())
print('*'*20+'通过items()来遍历'+'*'*20)
for item in doc.find('ul').children('.item-0').items():
print(item)
print('*'*20+'通过attr方法获取属性'+'*'*20)
print(doc.find('ul').children('.item-1.active').attr('class'))
print(doc.find('ul').children('.item-1.active').attr['class'])
print('*'*20+'通过text方法获取文字内容'+'*'*20)
print(doc.find('ul').children('.item-1.active').text())
print('*'*20+'通过html方法获取内容'+'*'*20)
print(doc.find('ul').children('.item-1.active').html())
节点操作
- addClass()
- removeClass()
- attr(‘name’,‘value’) 两个参数代表修改,一个参数代表获取
- text(“new text”) 带参数为修改内容
- html(“new html”) 带参数为修改内容
- remove() 移除元素
- append() 在被选元素的结尾插入内容
- empty() 清空元素
- prepend() 在被选元素的开始插入内容
html = """
<div>
<ul class="list">
<li class="item-0">one</li>
<li class="item-1"><a href="www.csdn.net">two</a></li>
<li class="item-0" id="three"><span class="bold"><a href="www.baidu.com">three</a></span></li>
<li class="item-1 active"><a href="www.csdn.net">four</a></li>
<li class="item-0"><a href="www.csdn.net">five</a></li>
</ul>
</div>
"""
import requests
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-1.active')
print(li)
li.removeClass('active')
print(li)
li.addClass('activate')
print(li)
li.attr('name','link')
print(li)
li.text('changed item')
print(li)
li.html('<span>changed item</span>')
print(li)
li.append('<img src="img.png"/>')
print(li)
li.prepend('<img src="img2.png"/>')
print(li)
li.remove('img')
print(li)
li.empty()
print(li)
伪类操作
- :first-child 第一个元素
- :last-child 最后一个元素
- :nth-child(2) 第二个元素
- :gt(2) 第三个以后的元素(第四个开始)
- :nth-child(2n) 步长为2获取元素,即1、3、5……
- :contains(“four”) 获取包含指定字符串的元素
html = """
<div class="wrap">
<div class="container">
<ul class="list">
<li class="item-0">one</li>
<li class="item-1"><a href="www.csdn.net">two</a></li>
<li class="item-0" id="three"><span class="bold"><a href="www.baidu.com">three</a></span></li>
<li class="item-1 active"><a href="www.csdn.net">four</a></li>
<li class="item-0"><a href="www.csdn.net">five</a></li>
</ul>
</div>
</div>
"""
import requests
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)
# 设置步长为2获取元素
li = doc('li:nth-child(2n)')
print(li)
# 获取包含某内容的元素
li = doc('li:contains("four")')
print(li)