网页数据解析与爬取----pyquery

网页数据解析与爬取----pyquery

pyquery 使用

1、准备工作

pyquery安装

pip install pyquery

2、初始化

使用pyquery库解析HTML文本时,需要先将其初始化一个PyQuery对象

1、字符串初始化

这种方式直接把HTML的内容当做初始化参数,来初始化PyQuery对象

# 导入模块,起别名为pq
from pyquery import PyQuery as pq
# 将HTML字符串当作参数传递给PyQuery类,完成初始化
doc = pq(html)
print(doc('li'))
2、URL 初始化

初始化参数除了能以字符串形式传递外,还能使用网页的URL,只需指定PyQuery对象的参数为URL即可

from pyquery import PyQuery as pq
# PyQuery对象会先请求URL,然后用得到的html内容完成初始化(将网页源代码以字符串形式传递给PyQuery类,从而完成初始化操作)
doc = pq(url="https://www.baidu.com")
# 与上一行代码等价
doc = pq(requests.get(url="https://www.baidu.com").text)
print(doc('title'))
3、文件 初始化

传递本地文件名,进行初始化,此时将参数指定为filename

from pyquery import PyQuery as pq
doc = pq(filename="demo.html")
print(doc('title'))

3、基本CSS选择器

from pyquery import PyQuery as pq
doc = pq(html)
print(doc('#container .list li'))
print(type(doc('#container .list li')))
# 获取节点文本内容
for item in doc('#container .list li').items():
    print(item.text())

4、查找节点

1、查找子节点

使用find方法,参数是CSS选择器

from pyquery import PyQuery as pq
doc = pq(html)
item = doc('.list')
print(type(items))
print(items)
lis = items.find('li')
print(type(lis))
print(lis)
# find方法的查找范围是节点的所有子孙节点,如果只是查找子节点,可用children方法
lis = items.children()
print(type(lis))
print(lis)
# 如果要筛选所有子节点中符合条件的节点,例如筛选出子节点中class为active的节点,则可向children方法传入CSS选择器.active
lis = items.children('.active')
print(lis)
2、父节点

使用parent方法获取某个节点的直接父节点

from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
container = items.parent()
print(type(container))
print(container)

使用parents方法获取某个节点的祖先节点

from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
parents = items.parents()
print(type(parents))
print(parents)
3、兄弟节点

使用siblings方法获取

from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.list .item-0.active')
print(li.siblings())

5、节点操作

pyquery库提供了一系列方法对节点进行动态修改,例如移除某个节点等,这些操作会为提取信息带来极大的便利

1、addClass 和 removeClass
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.removeClass('active')
print(li)
li.addClass('active')
print(li)

addClass和removeClass方法可动态改变节点的class属性

2、attr、text 和 html

使用attr对属性进行操作,使用text和html方法可用来改变节点内部的内容

from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.attr('name', 'link')
print(li)
li.text('change item')
print(li)
li.html('<span>change item</span>')
print(li)
3、remove

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()) # 结果:hello world this is paragraph
wrap.fing('p').remove()
print(wrap.text()) # hello world

6、伪类选择器

CSS选择器支持多种多样的伪类选择器,例如选择第一个节点,选择最后一个节点,奇偶数节点,包含某文本的节点等


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)
li = doc('li:nth-child(2n)')
print(li)
li = doc('li:contains(second)')
print(li)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值