Python爬虫必知必会的三大网页解析库
掌握这三大网页解析库,基本可以解决100%网页提取问题
xpath
- 最方便最快捷的解析方式
解析网页xpath是首选,它易读,方便书写,使用起来非常简单。使用谷歌或edge浏览器可以打开元素,直接书写xpth,所见即所得。
书写xpath语法,所选节点会在html中实时高亮显示。
xpath语法理解起来也很简单,“/”表示选择直接子节点,例如:/div/p,p是div下的直接子节点;“//”表示选择非直接子节点,例如:/div//p,p和div之间还有其它节点。
使用“/”选择可以联想到电脑里的资源管理器的资源路径,一个意思,“//”在xpath选择中最常用,“/”逐级选择,使用“//”跳选。
//div[@class=”list”]//a//p,中括号里的写法是指定该div的class属性,进一步限定选择。最后的p标签才是我们选择的对象,如果你要选择p标签的文本,那么后面还需要跟上“/text()”,完整写法://div[@class=”list”]//a//p/text()
爬取url是家常便饭,xpath获取某标签中的url也是非常容易,来看看吧!
是的,只需要在最后的标签加上“/@href”即可获取href属性对应的url。
非常容易!
在这里仅作几个例子演示,xpath选择方式非常多,掌握其中常用几种,基本可以解决99%的网页。
想完整学习xpath,可以直接通过搜索引擎搜索,这样的视频教程和博客文档多如牛毛,在python语言中,使用xpath解析网页,首先安装使用lxml模块进行字符串转换成html,因为xpath只能处理html文档,在这里我将我学习lxml和xpath笔记分享出来。
pyquery
- 最佳CSS选择器模块
pyquery是个非常不错的css选择器模块,熟知前端的都知道,css选择器有多方便,不亚于xpath。bs4虽然很受欢迎,很主流,但选择节点太繁琐,步骤多。pyquery真心不错,不使用xpath,pyquery是我最爱使用的网页解析库,它有多好用来演示下。
- 爬取豆瓣影评作者
1 | from pyquery import PyQuery as pq |
打印结果:
- [‘刷鞋大王’, ‘R荣十二’, ‘珍珠奶猹’, ‘朝暮雪’, ‘天下行走’, ‘保温杯喝冷水’, ‘枨不戒’, ‘難捨難分’, ‘江湖骗子’, ‘筷子兄弟-鸡腿’, ‘看电影看到死’, ‘上下楼梯靠右走’, ‘lanrachel’, ‘沉睡的小鹏’, ‘粉粿症候群’, ‘马尾鱼’, ‘阿甘正二’, ‘小良’, ‘之方’, ‘Fenster’, ‘咦,那个胖大海’, ‘错是世界不是我’, ‘胡萝卜糊了’, ‘应该没什么不同’, ‘雨梨’, ‘Gaaitung-Hok’, ‘黄黄国王’, ‘Hoesdont_tryme’, ‘啊?啊!’, ‘莎士比亚的妹妹’, ‘诸事大吉’, ‘岁月静好’, ‘大葱’, ‘沅有芷兮’, ‘倩儿的小岛’, ‘滔滔涛涛’, ‘地下游艺宫’, ‘沐如蓝’, ‘元宵灯会’, ‘正离子-雪’, ‘ROSES’, ‘Thelonious’, ‘王兆鑫-DOC’, ‘陈年老大’, ‘Kubrick’, ‘追剧练习生’, ‘奈此朱梁跋扈何’, ‘光’, ‘ououou’, ‘Yilianmengbi🍁’]
pyquery仅用了三行代码,第一行代码css选择,第二行代码遍历出所有作者名称添加到列表,简单高效!
re 正则表达式
- 数据过滤提取万金油
你是谁?你旁边都有啥?
这就是正则表达式提取数据的主要思路。
- 以豆瓣音乐为例
1 | import re |
输出结果:
- [‘无名曲’, ‘PAP’, ‘酒色器迷 (寒山尺八 叁)’, ‘Ⅷ’, ‘五楼’, ‘Fade out’, ‘162-气人的小孩-4500’, ‘ARASHI’, ‘想告诉你她已经离开’, ‘致青春-Youth’, ‘近视-2021.01’, ‘《shamed》伴奏demo’, ‘风吟 Wind Singing’, ‘北沙滩’, ‘寻光’, ‘RED(五首钢琴曲以及念诗)’, ‘十一月 山间晚祷(古筝独奏 陈虹蕗 )’, ‘海战Moba_乡村_Boss’, ‘阳春(神奇秘谱)丝弦-丹泉琴-2021-01-24_20-40’, ‘rocket’]
python中的正则表达式是re模块,在爬虫中,使用最多的方法就是findall函数,顾名思义查找全部。括号里填入的第一个参数就是正则表达式,第二个参数是待匹配的文本。
‘<a href=”javascript:;”>(.*?)‘,这段正则中的圆括号里才是我们要提取的内容,而圆括号外只是参考,告诉正则,你要提取的内容它的左边是什么,右边是什么。圆括号里的“.*?”,点表示匹配任意符号,星号匹配零次或多次,问号是非贪婪模式匹配。
很多人觉得正则表达式复杂,因为正则表达式的元字符非常多。什么是元字符?“.*?”这三个就是元字符,它们分别匹配某一类型的数据。再比如,一个“+”在正则中就表示匹配一次或多次,“\d”就表示匹配数字。“\D”就表示匹配非数字……元字符太多了,这里介绍不完的。学习正则不必把正则所有元字符死记硬背,只需要掌握正则在不同编程语言中的语法使用即可,当提取某一类型的数据时,直接搜索引擎搜索好了,这样的资料太多了,很好找,使用起来就像查字典般容易。
正则搜索内容最高效,它不仅仅只针对网页,任何文本字符串类型都支持,所以说它是万金油。xpath提取网页数据是首选,如果html文档中的数据嵌入在javascript标签中,xpath就无能为力,何以解忧?唯有正则。
最后,奉上我的正则学习笔记。
python正则表达式学习笔记
以上就是我使用python爬虫最推荐的三大网页解析库,熟练掌握任何网页不在话下,轻而易举过滤数据,精确提取。