【网络安全带你练爬虫-100练】第12练:pyquery解析库提取指定数据

目录

一、目标1、基础/环境的准备工作

二、目标2:开始使用pyquery

三、目标3:提取到指定的数据

四、目标3:通过列表的形式获取指定数据

五、扩展:其他方法

六、网络安全O


一、目标1、基础/环境的准备工作

扫描二维码关注公众号,回复: 15728341 查看本文章

1、文档:

PyQuery解析库的使用,我们可以对比jQuery来使用

jQuery API 中文文档https://www.94xh.com/

2、环境:

安装pyquery(或者直接在pycharm上安装)

pip install pyquery

3、定位

<li>
    <div class="A">
        <div id="B">

定位li--->'li'

定位<div class="A">--->'li .A'

定位<div id="B">--->'li .A #B'

(与顺序无关,与标签有关)


 



二、目标2:开始使用pyquery

1、打印head数据

from pyquery import PyQuery as pq

doc = pq(url='http://www.baidu.com')
print(doc('head'))

head数据被打印出来了,其实可以看见汉字是出现了乱码的

2、编码:

解决乱码问题(就是使用utf-8编码,来解决中文乱码)

import requests
from pyquery import PyQuery as pq

response = requests.get('http://www.baidu.com')
content = response.content.decode('utf-8')
doc = pq(content)
print(doc('head'))

没有了乱码问题

3、提取对应属性

会提取所有满足条件的div标签

.official-newsbd爬取所有<div class="official-newsbd">

import requests
from pyquery import PyQuery as pq

response = requests.get('https://www.chinaz.com/')
content = response.content.decode('utf-8')
doc = pq(content)
print(doc('.official-newsbd'))



三、目标3:提取到指定的数据

1、目标:

提取所有列表图片的相关信息

2、全提取: 

提取所有的<div class="thumb">

import requests
from pyquery import PyQuery as pq

response = requests.get('https://www.chinaz.com/')
content = response.content.decode('utf-8')
doc = pq(content)
items = doc('.thumb')

print(item)

运行结果

3、逻辑提取:

这个是一步一步往下走提取内容

import requests
from pyquery import PyQuery as pq

response = requests.get('https://www.chinaz.com/')
content = response.content.decode('utf-8')
doc = pq(content)
items = doc('.official-newsbd')
item = items.find('.thumb')

print(item)

运行结果

4、列表数据提取

children()是一个函数或方法,用于获取一个元素的所有子元素

item = items.children()



四、目标3:通过列表的形式获取指定数据

假设我们要提取到链接URL

1、找到最小子标签

首先我们先到最小子标签

(可以不用逻辑一步一步往下走,也可以直接找到它)

import requests
from pyquery import PyQuery as pq

response = requests.get('https://www.chinaz.com/')
content = response.content.decode('utf-8')
doc = pq(content)
items = doc('.official-newsbd')
item = items.find('.thumb')
i = item('a')

print(i)

2、for循环-提取标签内URL

关键代码

(其实 实现的方法各种各样)

.attr('href')

.attr.href

完整代码

import requests
from pyquery import PyQuery as pq

response = requests.get('https://www.chinaz.com/')
content = response.content.decode('utf-8')
doc = pq(content)
items = doc('.official-newsbd')
item = items.find('.thumb')
for i in item:
    b = pq(i)('a')
    print(b.attr('href'))

改进前:

items = doc('.official-newsbd')
item = items.find('.thumb')

 改进后:

item = doc('.official-newsbd .thumb')

3、获取文本

关键代码

b.text()

(我这个目标标签没有文本去提取)



五、扩展:其他方法

1、兄弟类


siblings() 方法返回一个 PyQuery 对象,包含了当前元素的所有同级元素。这些同级元素是当前元素的直接兄弟节点(相同父节点下的其他子节点),不包括当前元素本身

from pyquery import PyQuery as pq

html = '''
<div>
  <p class="first">First paragraph</p>
  <p class="second">Second paragraph</p>
  <p class="third">Third paragraph</p>
</div>
'''

doc = pq(html)
elem = doc('.second')

siblings = elem.siblings()
print(siblings)

2、父类

parent() 方法返回一个 PyQuery 对象,包含了当前元素的直接父级元素。父级元素是指当前元素的上一级节点,即当前元素的父节点
 

from pyquery import PyQuery as pq

html = '''
<div class="parent">
  <p>Child paragraph</p>
</div>
'''

doc = pq(html)
child = doc('p')

parent = child.parent()
print(parent)


六、网络安全O

README.md · 书半生/网络安全知识体系-实战中心 - 码云 - 开源中国 (gitee.com)https://gitee.com/shubansheng/Treasure_knowledge/blob/master/README.md

GitHub - BLACKxZONE/Treasure_knowledgehttps://github.com/BLACKxZONE/Treasure_knowledge

猜你喜欢

转载自blog.csdn.net/qq_53079406/article/details/131663524