爬虫05-PyQuery使用(简)

pyquery网页解析库
同样的,是网页解析的前提是成功访问网页,能够获取到内容,之后再是解析。

from pyquery import PyQuery as pq

1. 初始化

1.1 字符串初始化

以下面一段html为例

html = '''

'''
doc = pq(html) #字符串初始化
print(doc('li'))   #CSS选择器

爬虫05-PyQuery使用(简)_第1张图片

1.2 URL初始化

from pyquery import PyQuery as pq
doc = pq(url='http://www.baidu.com')   #直接请求链接
print(doc('head'))

在这里插入图片描述

1.3 文件初始化

这里仅举例:

doc = pq(filename='demo.html')
print(doc('li'))

爬虫05-PyQuery使用(简)_第2张图片

2. 使用CSS选择器

同样是解析完网页后进行选择,PyQuery和BeautifulSoup的选择形式稍微有些不同。

BeautifulSoup是,见上篇:
使用标签器 对象.
使用标准选择器 对象.find_all( )对象.find( )
使用CSS选择器 对象.select( )

PyQuery是:对象(‘需要选择的内容’)

doc = pq(html)
print(doc('#container .list li'))  #不一定是严格的父节点与子节点关系

爬虫05-PyQuery使用(简)_第3张图片
这里选择的是属性id是container, 属性calss是list, 节点名是li的节点。
是全部都会选出来,不会默认只选第一个(比较BeautifulSoup)

3. 查找元素

3.1 子元素

doc = pq(html)
items = doc('.list')   #找出class=list的节点
print(type(items),'\n')
print(items,'\n')

#找出上个节点里,名称为li的节点(全部):
print('找出上个节点里,名称为li的节点(全部):','\n')
lis = items.find('li')   
print(type(lis))
print(lis)

#找li节点,或者
# print(doc('.list li'))
#还或者
# print(items.children())

爬虫05-PyQuery使用(简)_第4张图片
上面这里使用的是标准选择器,find。

lis = items.children('.active')
print(lis)

在这里插入图片描述
注意这里被没有写全class属性,因为整段html中,class属性值包含’active’的不多,可以选出来。如果有class='active’的节点,那就选不出来上面的结果了。

3.2 父元素

选父节点的形式和BeautifulSoup一样

doc = pq(html)
items = doc('.list')
container = items.parent()
print(type(container))
print(container)

爬虫05-PyQuery使用(简)_第5张图片
选出来它的上一层父节点(最开始的这段html也只有一个父节点)。
如果再往外嵌套一个节点,如:

html = '''

'''

那么会输出2个,分别是上一层父节点,和上上一层父节点(全部的父节点)。

3.3 兄弟元素

以紧邻的上段html为例:

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

在这里插入图片描述
将符合条件的兄弟节点都选出来了。

doc = pq(html)
li = doc('.list .item-0.active')  
#这里.item-0.active中间没有空格,表示是并列关系,class含有这两个属性的选出来
print(li.siblings('.active'))

在这里插入图片描述

4. 遍历

也即用循环,遍历选出内嵌的子节点

doc = pq(html)
lis = doc('li').items()   #使用items进行遍历
print(type(lis))
for li in lis:
    print(li('a'))

注意PyQuery中使用 .items先选定节点内容,再往下遍历。

5. 具体获取信息

5.1 获取属性值

对象(’ ')或 对象.

doc = pq(html)
a = doc('.item-0.active a') #这里.item-0.active中间没有空格,表示是并列关系,class含有这两个属性的选出来
print(a)
print(a.attr('href'))
print(a.attr.href)

在这里插入图片描述

5.2 获取文本

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

在这里插入图片描述

5.3 获取HTML

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

在这里插入图片描述

6. DOM操作

6.1 addClass、removeClass

doc = pq(html)
li = doc('.item-0.active')
print(li)
li.removeClass('active')
print('remove active之后:','\n',li)
li.addClass('active')
print('add active之后:','\n',li)

爬虫05-PyQuery使用(简)_第6张图片

6.2 属性attr更改

doc = pq(html)
li = doc('.item-0.active')
print(li)
li.attr('name', 'link')   #在属性attr中添加name
print('属性attr添加了name后:','\n',li)
li.css('font-size', '14px') #在属性attr中添加格式style
print('属性attr添加了style后','\n',li)

爬虫05-PyQuery使用(简)_第7张图片

6.3 remove

html = '''
Hello, World

This is a paragraph.

'''
from pyquery import PyQuery as pq doc = pq(html) wrap = doc('.wrap') print('wrap节点的全部text:','\n',wrap.text()) print('\n') wrap.find('p').remove() print('删除一个子节点后的text:',wrap.text())

在这里插入图片描述
其他DOM方法

7. 伪类选择器

html = '''

'''
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)

爬虫05-PyQuery使用(简)_第8张图片
上面伪类选择器,个人感觉用到的时候再查就可以了

更多CSS选择器内容

官方文档

你可能感兴趣的:(python爬虫,爬虫)