pyquery

强大又灵活的网页解析库,如果你觉得正则写起来太麻烦,如果你觉得BeautifuiSoup语法太难记,如果你熟悉JQuery的语法,那么PyQuery就是你的绝对选择。

初始化

1字符串初始化

html = '''
<div><ul><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div>
'''
from pyquery import PyQuery as pq
doc = pq(html)#声明一个对象
print(doc('li'))#传入一个选择器

doc(‘li’) 选择器,如果选择标签直接加名字,如果选择id,加#,如果选择class,前面加.点。

2URL初始化

from pyquery import PyQuery as pq
doc = pq(url='https://www.2345.com/?38001')#传入一个网址
print(doc('head'))

3文件初始化

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

基本CSS选择器

html = '''
<div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('#container .list li'))#id,class,标签名

doc(’#container .list li’)中list不一定是container的直接子对象,只要有层级关系就可以,中间需要用空格隔开。如果没有空格表示并列,表示条件需要同时满足。如(a.b)表示条件要同时满足ab。ab之间没有层级关系。

查找子元素

### 子元素#%%html = '''
<div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
print(type(items))
print(items)print('查找子元素')
lis = items.children()
print(type(lis))
print(lis)
print('具体子元素')
lis = items.children('.active')
print(lis)

items = doc(’.list’),items是一个查找对象,对对象可以调用查找方法,如find(查找子元素),children(直接子元素)。

查找父元素

html = '''
<div class="wrap"><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div></div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
parents = items.parents()
parent = items.parent()
print('父亲以及祖辈')
print(parents)
print('直接父元素')
print(parent)

查找兄弟元素

html = '''
<div class="wrap"><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div></div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.list .item-0.active')
print('所有兄弟')
print(li.siblings())
print('具体某一兄弟')
print(li.siblings('.active'))

遍历单个元素

html = '''
<div class="wrap"><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div></div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
lis = doc('li').items()
print(type(lis))
for li in lis:print(li)

获取信息

获取属性

html = '''
<div class="wrap"><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div></div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.attr('href'))#查找网址
print(a.attr.href)

获取文本

html = '''
<div class="wrap"><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div></div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')#.item-0.active之间没有空格,表示class同时是item-0,active。有空格表示层级关系,如active a
print(a)
print(a.text())#获取文本

获取HTML

html = '''
<div class="wrap"><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div></div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
print(li.html())

DOM操作

addClass、removeClass

html = '''
<div class="wrap"><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div></div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')#.item-0.active,属性之间无空格,表示同时满足
print(li)
li.removeClass('active')
print(li)
li.addClass('active')
print(li)

attr、css

html = '''
<div class="wrap"><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div></div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.attr('name', 'link')
print(li)
li.css('font-size', '14px')
print(li)

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())
wrap.find('p').remove()
print(wrap.text())

其他DOM方法

http://pyquery.readthedocs.io/en/latest/api.html

伪类选择器

html = '''
<div class="wrap"><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li><li class="item-1 active"><a href="link4.html">fourth item</a></li><li class="item-0"><a href="link5.html">fifth item</a></li></ul></div></div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('li:first-child')#获取第一个Li标签
print(li)
li = doc('li:last-child')#获取最后一个li标签
print(li)
li = doc('li:nth-child(2)')#获取第二个li标签
print(li)
li = doc('li:gt(2)')#获取第二个li标签
print(li)
li = doc('li:nth-child(2n)')#获取第二个li标签
print(li)
li = doc('li:contains(second)')#获取第二个li标签
print(li)

作者:电气-余登武。写作属实不容易,如果你觉得本文不错,点个赞再走。

爬虫笔记:pyquery详解相关推荐

  1. 【一起学爬虫】PyQuery详解

    回顾 之前介绍了Beautifulsoup库,这个库可以让我们不写繁杂的正则表达式就可以爬取数据.但是你可能会觉得Beautifulsoup库不太好用,语法太繁杂,难记.今天介绍一个灵活又强大的网页解 ...

  2. 爬虫解析利器PyQuery详解及使用实践

    作者:叶庭云 整理:Lemon 爬虫解析利器 PyQuery详解及使用实践 之前跟大家分享了 selenium.Scrapy.Pyppeteer 等工具的使用. 今天来分享另一个好用的爬虫解析工具 P ...

  3. 爬虫之Xpath详解

    爬虫之Xpath详解 XPath介绍 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. XPath 是 W3C XSLT 标准的主要元素, ...

  4. python爬虫入门实例-Python爬虫天气预报实例详解(小白入门)

    本文研究的主要是Python爬虫天气预报的相关内容,具体介绍如下. 要求是把你所在城市过去一年的历史数据爬出来. 分析网站 我们可以看到,我们需要的天气数据都是放在图表上的,在切换月份的时候,发现只有 ...

  5. python编程入门与案例详解pdf-Python爬虫天气预报实例详解(小白入门)

    本文研究的主要是Python爬虫天气预报的相关内容,具体介绍如下. 这次要爬的站点是这个:http://www.weather.com.cn/forecast/ 要求是把你所在城市过去一年的历史数据爬 ...

  6. fofa自动化爬虫脚本更新+详解

    fofa自动化爬虫脚本更新+详解 起因 最近要用到fofa爬虫,为什么要用爬虫不用api,问就是穷,想起来之前写过一个相关的脚本:Fofa-python-脚本,是很久以前写的了,之前写的时候有点问题, ...

  7. python编程入门与案例详解-Python爬虫天气预报实例详解(小白入门)

    本文研究的主要是Python爬虫天气预报的相关内容,具体介绍如下. 这次要爬的站点是这个:http://www.weather.com.cn/forecast/ 要求是把你所在城市过去一年的历史数据爬 ...

  8. IOS开发学习笔记-----UILabel 详解

    IOS开发学习笔记-----UILabel 详解 01 //创建uilabel 02 UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMa ...

  9. Python爬虫JS解密详解,学会直接破解80%的网站(一)!!!

    文章目录 1.网页查看 2.有道翻译简单实现源码 3.JS解密(详解) 4.python实现JS解密后的完整代码 4.1.实现效果 5.JS解密后完整代码升级版 5.1.实现效果 CSDN独家福利降临 ...

  10. wringPi 初始化GPIO 为上拉_敏矽微电子Cortex-M0学习笔记04-GPIO详解及应用实例

    前面我们已经对敏矽微电子的基于cortex m0内核的ME32F030R8T6的基本功能做了介绍,然后详细讲解了开发环境MDK的安装,pack包的安装,工程的建立及程序的仿真,紧接着讲解了ME32F0 ...

最新文章

  1. MegEngine计算图、MatMul优化解析
  2. 在Data Collector中使用TensorFlow进行实时机器学习
  3. php动态生成apk渠道包,Android自动生成渠道包
  4. iptables下开放ftp连接端口
  5. mysql全文索引含义_【分针网】MySQL全文索引应用简明教程
  6. 使用Metal打造令人惊叹的游戏效果
  7. su组件在什么窗口_草图大师SketchUp(SU)快捷键
  8. 云原生与数据中台,企业数字化转型的“正确打开方式”
  9. Java垃圾回收机制的工作原理
  10. vb服务器获取ftp文件,vb获取ftp服务器文件时间戳
  11. 浅谈,如何获取MTK CPU信息 请看我是如何做的。一步步来吧
  12. Python学习_038.列表_排序_revered逆序_max_min_sum
  13. 字符串拼接用逗号隔开的四种方法
  14. 失业七个月,面试六十家公司
  15. 全国公立医院病案首页上报系统(适用于二、三级医院)
  16. 算法-九九乘阶打印和计算N的乘阶结果
  17. Element UI Table表格样式调整
  18. Modern Cpp 并发编程指南
  19. 2020身高体重标准表儿童_儿童0一18岁青少年身高体重标准表-2020年儿童身高体重表图(中国标准版)下载最新比例表-西西软件下载...
  20. MTK平台一个花屏重启问题的分析

热门文章

  1. 深入理解python异步编程_深入理解Python异步编程
  2. java的jbutton啥意思,Jbutton和Jpanel和JFrame之间的区别?
  3. 【Linux环境下安装Maven与环境配置简易教程】
  4. Mybatis-typeAliases的作用
  5. [USACO5.4]奶牛的电信Telecowmunication
  6. 【练习】2021下半年数据结构刷题笔记和总结 (一)(图和动态规划)
  7. 【项目实战】pytorch载入训练好的模型并进行可视化模型预测绘图
  8. windows安装pm2
  9. 找出得分最高的无重复子段
  10. 线段树 求矩形并 面积