Python爬虫:数据解析和提取—pyquery

Python爬虫:数据解析和提取—pyquery,第1张

 一.安装
pip3 install pyquery
二.导入与实例化
  导入
from pyquery import PyQuery as pq
  实例化
  • 本地对象
html=pq(filename='······')
  • 网页对象
html=pq(url='······')
三.XPath规则
代码实例
page_text='''
    
    
        
  • first item
  • second item
  • third item
  • fourth item
  • fifth item
'''
1.CSS选择器   1.1 使用方法
  • id——.#id
  • class——.class
  • li——li
  • 空格表示嵌套
  实例

        先选取id为container的节点,再选取其内部class为list的节点内部的所有li节点

result=html('#container .list li')
print(result)

        遍历获取的节点,再调用text方法获取文本内容

result=html('#container .list li').items()
for item in result:
    print(item.text())
2. 查找节点   2.1 子节点
  • find( ):查找所有子孙节点
items=html('.list')
result=items.find('li')
print(result)
  • children( ):查找所有子节点
result=items.children()

        若要筛选子节点中符合条件的节点,则向children传入CSS选择器

result=items.children('.active')
  2.2 父节点
  • parent( ):直接父节点
items=html('.list')
result=items.parent()
print(result)
  • parents( ):所有祖先节点
items=html('.list')
result=items.parents()
print(result)

        若要筛选某个祖先节点,则向parents方法传入CSS选择器

items=html('.list')
result=items.parents('.wrap')
print(result)
  2.3 兄弟节点
  • siblings( ):.item-0与.active之间不加空格则表示并列
items=html('.list')
result=items('.item-0.active').siblings()
print(result)

        若要筛选某个兄弟节点,则向siblings方法传入CSS选择器

items=html('.list')
result=items('.item-0.active').siblings('.active')
print(result)
 3. 遍历节点   3.1 单个节点
  • 直接打印输出
result=(' .item-0.active')
print(result)
  • 转成字符串
result=items(' .item-0.active')
print(str(result))
  3.2 多个节点
  • items( ):遍历多个节点
result=html('li').items()
for li in result:
    print(li)
3.3 获取属性
  • attr( ):单个节点

        首先选中class为item-0和activr的li节点内的a节点,然后调用attr方法获取属性

result=html(' .item-0.active a').attr('href')
print(result)
#或
result=html(' .item-0.active a').attr.href
print(result)

        当放回结果有多个时,只返回第一个节点的属性

  • 多个节点需要使用遍历
result=html('a').items()
for a in result:
    print(a.attr.href)
3.3 获取文本
  • text( ):获取纯文字内容
result=html('.item-0.active a').text()
print(result)

        多节点全部获取,无需遍历 

  • html( ):获取html文本
result=html(' .item-0.active').html()
print(result)

        多节点只获取第一个,全部获取需遍历

4. 节点 *** 作   4.1 addClass和removeClass
  • removeClass:移除active这个class
result=html('.item-0.active').removeClass('active')
print(result)
  • addClass:添加1这个class 
result=html('.item-0.active').addClass('1')
print(result)
  4.2 attr、text和html

  • attr( ):传入新的属性,第一个参数为属性名,第二个参数为属性值
result=html('.item-0.active').attr('name','link')
print(result)
  • text( ):修改文本内容
result=html('.item-0.active').text('change items')
print(result)
  • html( ):修改html内容
result=html('.item-0.active').html('changed item')
print(result)
4.3 remove
  • remove( ):移除

实例

html=
‘’‘
    Hello, World
    

This is a paragraph.

'''

        提取Hello,World,而不要哦p节点内不得字符串

result=html('.wrap')
result.find('p').remove()
print(result.text())
5. 伪类选择器   5.1 第一个节点
result=html('li:first-child')
  5.2 最后一个节点
result=html('li:last-child')
  5.3 第n个节点
result=html('li:nth_child(2)')
  5.4 第n个节点之后的节点
result=html('li:gt(2)')
  5.5 偶数节点
result=html('li:nth-child(2n)')
  5.6 包含某一文本的节点
result=html('li:contains(xxx)')

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/571669.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存