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访问MySQL封装的常用类实例
Nov 11 Python
Python中的面向对象编程详解(上)
Apr 13 Python
Python的Django框架中自定义模版标签的示例
Jul 20 Python
简介二分查找算法与相关的Python实现示例
Aug 26 Python
Python下载网络小说实例代码
Feb 03 Python
django模板结构优化的方法
Feb 28 Python
python中如何使用分步式进程计算详解
Mar 22 Python
Python拼接字符串的7种方式详解
Mar 19 Python
Python通过文本和图片生成词云图
May 21 Python
Python Excel vlookup函数实现过程解析
Jun 22 Python
python 如何区分return和yield
Sep 22 Python
解决python 输出到csv 出现多空行的情况
Mar 24 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与SQL注入攻击[三]
2007/04/17 PHP
彻底杜绝PHP的session cookie错误
2009/08/09 PHP
备份mysql数据库的php代码(一个表一个文件)
2010/05/28 PHP
php摘要生成函数(无乱码)
2012/02/04 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
PHP实现图片压缩
2020/09/09 PHP
PHP合并两个或多个数组的方法
2019/01/20 PHP
JS取request值以及自动执行使用示例
2014/02/24 Javascript
JQuery实现table行折叠效果以JSON做数据源
2014/05/26 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
js事件处理程序跨浏览器解决方案
2016/03/27 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
2016/11/30 Javascript
AngularJS的依赖注入实例分析(使用module和injector)
2017/01/19 Javascript
jQuery实现大图轮播
2017/02/13 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
简单理解Vue中的nextTick方法
2018/01/30 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
2019/09/02 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
2020/08/06 Javascript
vue中如何添加百度统计代码
2020/12/19 Vue.js
python实现linux下使用xcopy的方法
2015/06/28 Python
python excel使用xlutils类库实现追加写功能的方法
2018/05/02 Python
Python3远程监控程序的实现方法
2019/07/15 Python
Python 操作 ElasticSearch的完整代码
2019/08/04 Python
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
WiFi云数码相框:Nixplay
2018/07/05 全球购物
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
学生实习介绍信
2014/01/15 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
2014年管理工作总结
2014/11/22 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
中学教师读书笔记
2015/07/01 职场文书
小数乘法教学反思
2016/02/22 职场文书
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript
sql注入教程之类型以及提交注入
2021/08/02 MySQL