python爬虫学习笔记之pyquery模块基本用法详解


Posted in Python onApril 09, 2020

本文实例讲述了python爬虫学习笔记之pyquery模块基本用法。分享给大家供大家参考,具体如下:

相关内容:

  • pyquery的介绍
  • pyquery的使用
    • 安装模块
    • 导入模块
    • 解析对象初始化
    • css选择器
    • 在选定元素之后的元素再选取
    • 元素的文本、属性等内容的获取
  • pyquery执行DOM操作、css操作
    • Dom操作
    • CSS操作
  • 一个利用pyquery爬取豆瓣新书的例子

首发时间:2018-03-09 21:26


pyquery的介绍

  • pyquery允许对xml、html文档进行jQuery查询。
  • pyquery使用lxml进行快速xml和html操作。
  • pyquery是python中的jquery

PyQuery的使用:

1.安装模块:

pip3 install pyquery

2.导入模块:

from pyquery import PyQuery as pq

3.解析对象初始化:

【使用PyQuery初始化解析对象,PyQuery是一个类,直接将要解析的对象作为参数传入即可

  • 解析对象为字符串时字符串初始化 :默认情况下是字符串,如果字符串是一个带http\https前缀的,将会认为是一个url
    textParse = pq(html)
  • 解析对象为网页时url初始化: 建议使用关键字参数url=
    # urlParse = pq('http://www.baidu.com') #1
    urlParse = pq(url='http://www.baidu.com') #2
  • 解析对象为文件时文件初始化:建议使用关键字参数filename=
    fileParse = pq(filename="L:\demo.html")
  • 解析完毕后,就可以使用相关函数或变量来进行筛选,可以使用css等来筛选,

4.CSS选择器:

  • 利用标签获取:
    result = textParse('h2').text()
  • 利用类选择器:
    result3=textParse(".p1").text()
  • 利用id选择:
    result4=textParse("#user").attr("type")
  • 分组选择:
    result5=textParse("p,div").text()
  • 后代选择器:
    result6=textParse("div a").attr.href
  • 属性选择器:
    result7=textParse("[class='p1']").text()
  • CSS3伪类选择器:
    result8=textParse("p:last").text()

(更多的,可以参考css)

5.在选定元素之后的元素再选取:

  • find():找出指定子元素 ,find可以有参数,该参数可以是任何 jQuery 选择器的语法,
  • filter():对结果进行过滤,找出指定元素 ,filter可以有参数,该参数可以是任何 jQuery 选择器的语法,
  • children():获取所有子元素,可以有参数,该参数可以是任何 jQuery 选择器的语法,
  • parent():获取父元素,可以有参数,该参数可以是任何 jQuery 选择器的语法,
  • parents():获取祖先元素,可以有参数,该参数可以是任何 jQuery 选择器的语法,
  • siblings():获取兄弟元素,可以有参数,该参数可以是任何 jQuery 选择器的语法,
from pyquery import PyQuery as pq

html="""
<html>
<head>
</head>
<body>
<h2>This is a heading</h2>
<p class="p1">This is a paragraph.</p>
<p class="p2">This is another paragraph.</p>
<div> 
123
<a id="a1" href="http://www.baidu.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" >hello</a>
</div>
<input type="Button" >
<input id="user" type="text" >
</body>
"""

###初始化
textParse = pq(html)
# urlParse = pq('http://www.baidu.com') #1
# urlParse = pq(url='http://www.baidu.com') #2
# fileParse = pq(filename="L:\demo.html")

##获取
result = textParse('h2').text()
print(result)
result2= textParse('div').html()
print(result2)
result3=textParse(".p1").text()
print(result3)
result4=textParse("#user").attr("type")
print(result4)
result5=textParse("p,div").text()
print(result5)
result6=textParse("div a").attr.href
print(result6)
result7=textParse("[class='p1']").text()
print(result7)
result8=textParse("p:last").text()
print(result8)
result9=textParse("div").find("a").text()
print(result9)
result12=textParse("p").filter(".p1").text()
print(result12)
result10=textParse("div").children()
print(result10)
result11=textParse("a").parent()
print(result11)

6.元素的文本、属性等内容的获取:

attr(attribute):获取属性

result2=textParse("a").attr("href")

attr.xxxx:获取属性xxxx

result21=textParse("a").attr.href
result22=textParse("a").attr.class_

text():获取文本,子元素中也仅仅返回文本

result1=textParse("a").text()

html():获取html,功能与text类似,但返回html标签python爬虫学习笔记之pyquery模块基本用法详解

result3=textParse("div").html()

补充1:

元素的迭代:如果返回的结果是多个元素,如果想迭代出每个元素,可以使用items():

python爬虫学习笔记之pyquery模块基本用法详解

补充2:pyquery是jquery的python化,语法基本都是相通的,想了解更多,可以参考jquery。


pyquery执行DOM操作、css操作:

DOM操作:

add_class():增加class

remove_class():移除class

remove():删除指定元素

from pyquery import PyQuery as pq

html="""
<html>
<head>
</head>
<body>
<h2>This is a heading</h2>
<p id="p1" class="p1">This is a paragraph.</p>
<p class="p2">This is another paragraph.</p>
<div style="color:blue"> 
123
<a class="ca" href="http://www.baidu.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" >hello</a>
</div>
<input type="Button" >
<input id="user" type="text" >
</body>
"""

textParse=pq(html)
textParse('a').add_class("c1")
print(textParse('a').attr("class"))

textParse('a').remove_class("c1")
print(textParse('a').attr("class"))

print(textParse('div').html())
textParse('div').remove("a")
print(textParse('div').html())

 

css操作:

  • attr():设置属性
    • 设置格式:attr("属性名","属性值")
  • css():设置css
    • 设置格式1:css("css样式","样式值")
    • 格式2:css({"样式1":"样式值","样式2":"样式值"})
from pyquery import PyQuery as pq

html="""
<html>
<head>
</head>
<body>
<h2>This is a heading</h2>
<p id="p1" class="p1">This is a paragraph.</p>
<p class="p2">This is another paragraph.</p>
<div style="color:blue"> 
123
<a class="ca" href="http://www.baidu.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" >hello</a>
</div>
<input type="Button" >
<input id="user" type="text" >
</body>
"""

textParse=pq(html)
textParse('a').attr("name","hehe")
print(textParse('a').attr("name"))

textParse('a').css("color","white")
textParse('a').css({"background-color":"black","postion":"fixed"})
print(textParse('a').attr("style"))

这些操作什么时候会被用到:

【有时候可能会将数据样式处理一下再存储下来,就需要用到,比如我获取下来的数据样式我不满意,可以自定义成我自己的格式】

【有时候需要逐层清理再筛选出指定结果,比如<div>123<a></a></div>中,如果仅仅想要获取123就可以先删除<a>再获取】


一个利用pyquery爬取豆瓣新书的例子:

先使用审查元素,定位目标元素python爬虫学习笔记之pyquery模块基本用法详解

确认爬取信息python爬虫学习笔记之pyquery模块基本用法详解

要注意的是,豆瓣新书是有一些分在后面页的,实际上目标应该是li的上一级ul:python爬虫学习笔记之pyquery模块基本用法详解

使用PyQuery筛选出结果:

from pyquery import PyQuery as pq

urlParse=pq(url="https://book.douban.com/")

info=urlParse("div.carousel ul li div.info")

file=open("demo.txt","w",encoding="utf8")
for i in info.items():
  title=i.find("div.title")
  author=i.find("span.author")
  abstract=i.find(".abstract")
  file.write("标题:"+title.text()+"\n")
  file.write("作者:"+author.text()+"\n")
  file.write("概要:"+abstract.text()+"\n")
  file.write("-----------------\n")
  print("\n")
file.close()

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python命令行参数sys.argv使用示例
Jan 28 Python
零基础写python爬虫之抓取百度贴吧代码分享
Nov 06 Python
Python读取ini文件、操作mysql、发送邮件实例
Jan 01 Python
Google开源的Python格式化工具YAPF的安装和使用教程
May 31 Python
Python实现批量更换指定目录下文件扩展名的方法
Sep 19 Python
python random从集合中随机选择元素的方法
Jan 23 Python
python3编写ThinkPHP命令执行Getshell的方法
Feb 26 Python
python的命名规则知识点总结
Oct 04 Python
利用matplotlib实现根据实时数据动态更新图形
Dec 13 Python
python函数调用,循环,列表复制实例
May 03 Python
Django表单提交后实现获取相同name的不同value值
May 14 Python
Python简易开发之制作计算器
Apr 28 Python
python使用pymongo与MongoDB基本交互操作示例
Apr 09 #Python
使用Python和百度语音识别生成视频字幕的实现
Apr 09 #Python
利用Python制作动态排名图的实现代码
Apr 09 #Python
使用python接受tgam的脑波数据实例
Apr 09 #Python
解决使用python print打印函数返回值多一个None的问题
Apr 09 #Python
Python 实现自动完成A4标签排版打印功能
Apr 09 #Python
python网络编程:socketserver的基本使用方法实例分析
Apr 09 #Python
You might like
PHP递归遍历指定目录的文件并统计文件数量的方法
2015/03/24 PHP
PHP接口并发测试的方法(推荐)
2016/12/15 PHP
javascript Ext JS 状态默认存储时间
2009/02/15 Javascript
Javascript new关键字的玄机 以及其它
2010/08/25 Javascript
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
2010/10/20 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
2013/12/23 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
jQuery EasyUI 右键菜单--关闭标签/选项卡的简单实例
2016/10/10 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
jQuery中extend函数简单用法示例
2017/10/11 jQuery
详解angular分页插件tm.pagination二次触发问题解决方案
2018/07/20 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
2018/09/29 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
2018/10/22 Javascript
Vue自定义指令写法与个人理解
2019/02/09 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
2019/04/25 Javascript
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
使用JavaScrip模拟实现仿京东搜索框功能
2019/10/16 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
2019/10/28 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
压缩包密码破解示例分享(类似典破解)
2014/01/17 Python
python动态网页批量爬取
2016/02/14 Python
详解Python中的变量及其命名和打印
2016/03/11 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
python3.7 的新特性详解
2019/07/25 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
Python拆分大型CSV文件代码实例
2019/10/07 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
Python 内置函数globals()和locals()对比详解
2019/12/23 Python
python 使用建议与技巧分享(四)
2020/08/18 Python
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
外贸业务员工作职责
2014/01/06 职场文书
高中学生自我评价范文
2014/09/23 职场文书
党建工作整改措施
2014/10/28 职场文书