python爬虫学习笔记之pyquery模块基本用法详解
本文实例讲述了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中的jqueryPyQuery的使用:1.安装模块:pip3 install pyquery2.导入模块:
from pyquery import PyQuery as pq3.解析对象初始化:
【使用PyQuery初始化解析对象,PyQuery是一个类,直接将要解析的对象作为参数传入即可】
解析对象为字符串时字符串初始化 :默认情况下是字符串,如果字符串是一个带httphttps前缀的,将会认为是一个urltextParse = pq(html) 解析对象为网页时url初始化: 建议使用关键字参数url=
# urlParse = pq(’http://www.baidu.com’) #1urlParse = 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 pqhtml='''<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 href='http://www.baidu.com' rel='external nofollow' rel='external nofollow' rel='external nofollow' >hello</a></div><input type='Button' ><input 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.hrefprint(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.hrefresult22=textParse('a').attr.class_
text():获取文本,子元素中也仅仅返回文本
result1=textParse('a').text()
html():获取html,功能与text类似,但返回html标签
result3=textParse('div').html()
补充1:
元素的迭代:如果返回的结果是多个元素,如果想迭代出每个元素,可以使用items():
补充2:pyquery是jquery的python化,语法基本都是相通的,想了解更多,可以参考jquery。
pyquery执行DOM操作、css操作:DOM操作:add_class():增加class
remove_class():移除class
remove():删除指定元素
from pyquery import PyQuery as pqhtml='''<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 style='color:blue'> 123<a href='http://www.baidu.com' rel='external nofollow' rel='external nofollow' rel='external nofollow' >hello</a></div><input type='Button' ><input 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 pqhtml='''<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 style='color:blue'> 123<a href='http://www.baidu.com' rel='external nofollow' rel='external nofollow' rel='external nofollow' >hello</a></div><input type='Button' ><input 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爬取豆瓣新书的例子:先使用审查元素,定位目标元素
确认爬取信息
要注意的是,豆瓣新书是有一些分在后面页的,实际上目标应该是li的上一级ul:
使用PyQuery筛选出结果:
from pyquery import PyQuery as pqurlParse=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程序设计有所帮助。
相关文章:
1. python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解2. 利用FastReport传递图片参数在报表上展示签名信息的实现方法3. AJAX实现省市县三级联动效果4. ASP.NET MVC视图页使用jQuery传递异步数据的几种方式详解5. python用700行代码实现http客户端6. react axios 跨域访问一个或多个域名问题7. ASP.NET MVC通过勾选checkbox更改select的内容8. 详解php如何合并身份证正反面图片为一张图片9. XHTML 1.0:标记新的开端10. 如何基于Python和Flask编写Prometheus监控
