幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

Python爬虫之xpath语法及案例使用

  我们在写Python爬虫时,经常需要对网页提取信息,如果用传统正则表达去写会增加很多工作量,此时需要一种对数据解析的方法,也就是本章要介绍的Xpath表达式。Xpath是什么
  XPath,全称XMLPathLanguage,即XML路径语言,它是一门在XML文档中查找信息的语言。最初是用来搜寻XML文档的,但同样适用于HTML文档的搜索。所以在做爬虫时完全可以使用XPath做相应的信息抽取。
  XPath的选择功能十分强大,它提供了非常简洁明了的路径选择表达式。另外,它还提供超过100个内置函数,用于字符串、数值、时间的匹配以及节点、序列的处理等,几乎所有想要定位的节点都可以用XPath来选取。
  下面介绍实战中常用的几个知识点,详细也可以看W3C介绍:https:www。w3school。com。cnxpathindex。aspXpath语法介绍路径常用规则
  表达式
  描述
  实例
  nodename
  选取此节点的所有子节点
  xpath(p)
  选取了p节点的所有子节点
  从根节点选取
  xpath(p)
  从根节点上选取p节点
  选取所有当前节点,不考虑位置
  xpath(p)
  选取所有的p节点
  。
  选取当前节点
  xpath(。p)
  选取当前节点下的p节点
  。。
  选取当前节点的父节点
  xpath(。。)
  回到上一个节点
  选取属性
  xpath(calss)
  选取所有的class属性谓语规则
  谓语被嵌在方括号内,用来查找某个特定的节点或包含某个制定的值的节点
  表达式
  结果
  xpath(bodyp〔1〕)
  选取body下的第一个p节点
  xpath(bodyp〔last()〕)
  选取body下最后一个p节点
  xpath(bodyp〔last()1〕)
  选取body下倒数第二个p节点
  xpath(bodyp〔positon()〕)
  选取body下前两个p节点
  xpath(bodyp〔class〕)
  选取body下带有class属性的p节点
  xpath(bodyp〔classmain〕)
  选取body下class属性为main的p节点
  xpath(bodyp〔price35。00〕)
  选取body下price元素值大于35的p节点通配符
  通配符来选取未知的XML元素
  表达式
  结果
  xpath(p)
  选取p下的所有子节点
  xpath(p〔〕)
  选取所有带属性的p节点取多个路径
  使用运算符可以选取多个路径
  表达式
  结果
  xpath(ptable)
  选取所有的p和table节点功能函数
  使用功能函数能够更好的进行模糊搜索
  函数
  用法
  解释
  startswith
  xpath(p〔startswith(id,ma)〕)
  选取id值以ma开头的p节点
  contains
  xpath(p〔contains(id,ma)〕)
  选取id值包含ma的p节点
  and
  xpath(p〔contains(id,ma)andcontains(id,in)〕)
  选取id值包含ma和in的p节点
  text()
  xpath(p〔contains(text(),ma)〕)
  选取节点文本包含ma的p节点语法熟悉
  下面举一段HTML文本进行语法热身,代码如下!usrbinenvpythoncoding:utf8time:2022880:05author:gangtieemail:648403020qq。comfromlxmlimportetreetextulidultestliclassitem0firstitemliliclassitem1seconditemliliclassiteminactivethirditemliliclassitem1spanfourthitemspanliliclassitem0fifthitemul调用HTML类进行初始化,这样就成功构造了一个XPath解析对象。利用etree。HTML解析字符串pageetree。HTML(text)print(type(page))
  可以看到打印结果已经变成XML元素:classlxml。etree。Element字符串转换HTML
  字符串利用etree。HTML解析成html格式:print(etree。tostring(page,encodingutf8)。decode(utf8))htmlbodyulidultestliclassitem0firstitemliliclassitem1seconditemliliclassiteminactivethirditemliliclassitem1spanfourthitemspanliliclassitem0fifthitemliulbodyhtmlProcessfinishedwithexitcode0
  经过处理可以看到缺失的li也自动补全了,还自动添加html、body节点。查找绝对路径
  通过绝对路径获取a标签的所有内容apage。xpath(htmlbodypullia)foriina:print(i。text)firstitemseconditemthirditemNonefifthitem查找相对路径(常用)
  查找所有li标签下的a标签内容htmletree。HTML(text)ahtml。xpath(atext())print(a)〔firstitem,seconditem,thirditem,fifthitem〕当前标签节点
  。表示选取当前标签的节点。
  我们先定位ul元素节点得到一个列表,打印当前节点列表得到第一个ul,
  接着打印ul节点的子节点li,text()输出。pageetree。HTML(text)ulpage。xpath(ul)print(ul)print(ul〔0〕。xpath(。))print(ul〔0〕。xpath(。li))print(ul〔0〕。xpath(。liatext()))〔Elementulat0x234d16186c0〕〔Elementulat0x234d16186c0〕〔Elementliat0x234d1618ac0,Elementliat0x234d1618b00,Elementliat0x234d1618b40,Elementliat0x234d1618b80,Elementliat0x234d1618bc0〕〔firstitem,seconditem,thirditem,fifthitem〕父节点
  。。表示选取当前标签的父节点。
  可以看到得到ul的上一级ppageetree。HTML(text)ulpage。xpath(ul)print(ul〔0〕。xpath(。))print(ul〔0〕。xpath(。。))〔Elementulat0x1d6d5cd8540〕〔Elementpat0x1d6d5cd8940〕属性匹配
  匹配时可以用符号进行属性过滤
  查找a标签下属性href值为link2。html的内容htmletree。HTML(text)ahtml。xpath(a〔hreflink2。html〕text())print(a)〔seconditem〕函数
  last():查找最后一个li标签里的a标签的href属性htmletree。HTML(text)ahtml。xpath(li〔last()〕atext())print(a)〔fifthitem〕
  contains:查找a标签中属性href包含link的节点,并文本输出htmletree。HTML(text)ahtml。xpath(a〔contains(href,link)〕text())print(a)〔firstitem,seconditem,thirditem,fifthitem〕实战案例
  上面说完基本用法,接下来做几个实战案例练练手。案例一:豆瓣读书coding:utf81。请求并提取需要的字段2。保存需要的数据importrequestsfromlxmlimportetreeclassDoubanBook():definit(self):self。baseurlhttps:book。douban。comchart?subcatallicnindextopchartpopularself。headers{UserAgent:Mozilla5。0(WindowsNT10。0;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome104。0。0。0Safari537。36}请求并提取需要的字段defcrawl(self):resrequests。get(self。baseurl,headersself。headers)lisetree。HTML(res。text)。xpath(〔idcontent〕pp〔1〕ulli)print(type(lis))books〔〕forliinlis:print(etree。tostring(li,encodingutf8)。decode(utf8))print()title。join(li。xpath(。a〔classfleft〕text()))score。join(li。xpath(。p〔classclearfixw250〕span〔2〕text()))list输出带有〔刘瑜20224广西师范大学出版社82。00元精装〕publishing。join(li。xpath(。p〔classsubjectabstractcolorgray〕text()))。strip()book{title:title,score:score,publishing:publishing,}books。append(book)self。savedata(books)defsavedata(self,datas):withopen(books。txt,w,encodingutf8)asf:f。write(str(datas))defrun(self):self。crawl()ifnamemain:DoubanBook()。run()案例二:彼岸图片下载!usrbinenvpythoncoding:utf8author:钢铁知识库email:648403020qq。comimportosimportrequestsfromlxmlimportetree彼岸图片下载classBiAn():definit(self):self。urlhttps:pic。netbian。comself。headers{UserAgent:Mozilla5。0(WindowsNT10。0;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome104。0。0。0Safari537。36,cookie:yjsduid1cb922eedbda97280755010e53b2caca41659183144320;Hmlvtc59f2e992a863c2744e1ba985abaea6c1649863747,1660203266;zkhanecookieclassrecord2C232C542C552C662C602C;Hmlpvtc59f2e992a863c2744e1ba985abaea6c1660207771;yjsjssecuritypassport1225f36e8501b4d95592e5e7d5202f4081149e511630209607js}如果目录不存在会报错ifnotos。path。exists(BianPicture):os。mkdir(BianPicture)请求拿到ul列表defcrawl(self):resrequests。get(self。url,headersself。headers)res。encodinggbkulsetree。HTML(res。text)。xpath(p〔classslist〕ul〔classclearfix〕li)print(etree。tostring(uls,encodinggbk)。decode(gbk))循环拿到图片名、图片地址,拼接请求再次下载到图片forulinuls:imgnameul。xpath(。abtext())〔0〕imgsrcul。xpath(。aspanimgsrc)〔0〕print(imgnameimgsrc)imgurlself。urlimgsrc拼接后下载图片,转义Bytesimgresrequests。get(imgurl,headersself。headers)。contentimgpathBianPictureimgname。jpgdata{imgres:imgres,imgpath:imgpath}self。savedata(data)数据保存逻辑defsavedata(self,data):withopen(data〔imgpath〕,wb)asf:f。write(data〔imgres〕)print(data)defrun(self):self。crawl()ifnamemain:BiAn()。run()
  案例三:全国城市名称爬取!usrbinenvpythoncoding:utf8author:钢铁知识库email:648403020qq。comimportosimportrequestsfromlxmlimportetreeclassCityName():definit(self):self。urlhttps:www。aqistudy。cnhistorydataself。headers{UserAgent:Mozilla5。0(WindowsNT6。1;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome104。0。0。0Safari537。36}判断目录是否存在ifnotos。path。exists(cityproject):os。mkdir(cityproject)defcrawl(self):resrequests。get(urlself。url,headersself。headers)。textulsetree。HTML(res)。xpath(p〔classall〕p〔2〕ulp〔2〕li)allcitynamelist()forulinuls:citynameul。xpath(。atext())〔0〕print(type(cityname))allcityname。append(cityname)self。savedata(allcityname)defsavedata(self,data):withopen(。cityprojectcity。txt,w)asf:f。write(str(data))defrun(self):self。crawl()ifnamemain:CityName()。run()xpath使用工具chrome生成XPath表达式
  经常使用chome的朋友都应该知道这功能,在审查状态下(快捷键ctrlshifti,F12),定位到元素(快捷键ctrlshiftc),在Elements选项卡中,右键元素CopyCopyxpath,就能得到该元素的xpath了
  XpathHelper插件
  为chome装上XPathHelper就可以很轻松的检验自己的xpath是否正确了。安装插件需要特别上网,安装好插件后,在chrome右上角点插件的图标,调出插件的黑色界面,编辑好xpath表达式,表达式选中的元素被标记为黄色
  钢铁侠的知识库2022。08。15结语:
  以上就是利用XPath的所有用法,从常用语法,到案例练习都走了一遍。下一章钢铁知识库会继续介绍另一种好用的解析框架,BeautifulSoup
  文章来自https:www。cnblogs。comjibap16589856。html

霓虹深渊像素风横版射击游戏,惊喜不止如此《霓虹深渊》是一款肉鸽类的像素风横版射击游戏,它的乐趣在于随机性的收集装备和buff来提升自己以应对接下去的关卡,而一旦死亡就丧失所有,重回起点。所以每一个装备的搭配,都是一个……坚定信心主动发展,推动数字经济行稳致远学习中央经济工作会议精神,我们深切体会到,面对滚滚向前的时代洪流,民营企业只有正确对待环境变化,始终坚定发展信心,着力练好内功,增强应对风险挑战的核心能力,才能不断适应复杂严峻……vivoX90Pro深度体验以后,不吹不黑的,聊聊该机的优点国产智能手机究竟有多卷呢?刚刚发布的vivoX90系列可以告诉我们答案。昨天,笔者对vivoX90进行了快速上手体验以后,和大家分享了自己的使用感受。现在笔者想和大家聊一聊vi……推动国际货币体系多极化发展今年以来,随着美元进入加息周期,美元指数一度突破110大关,创下20年新高。欧元、英镑、日元、韩元等非美主要货币大幅贬值。据国际清算银行统计,目前美元对包括发达国家和新兴市场国……凯文鲁斯我们需要谈谈人工智能正在变得有多强凯文鲁斯我们正处于人工智能进步的黄金时代,是时候开始认真对待它的潜力和风险了。首先,监管机构和政治家需要跟上速度。其次,大型科技公司在人工智能开发方面投资数十亿美元……罗纳尔多对曼联的基础设施不满意克里斯蒂亚诺罗纳尔多对曼联比赛的设施质量不满意。据《竞技报》报道,与罗纳尔多关系密切的人士指出,克里斯蒂亚诺所习惯的标准远高于他在曼联发现的标准。前锋认为,俱乐部的管理结……勇士卫冕三大喜讯!榜眼秀或迎爆发汤神或成卫冕X因素上赛季重夺总冠军,让金州勇士再一次站在了联盟金字塔的顶端,而面对新赛季,他们自然希望能够实现卫冕。相比当初的4年3冠,勇士如今所要面对的对手要更强,同时原有核心球员的年龄老化等……外国人上车睡觉下车尿尿到景区拍照的旅游,导游为啥不一起吃?现在生活条件变好了,越来越多的人开始出门旅行了,年轻人的话,一般是自驾游或者自己出去旅游,而老年人喜欢组团一起去,这样自己不用考虑去哪玩了,跟着团队的到游走就行,但这就让外国人……下半年换机需仔细挑选,首选骁龙8新机器,流畅三五年问题不大近几年,骁龙芯片的口碑一直都不大好,尤其是在性能差距不大的情况下,两款旗舰芯片的功耗问题始终没有解决。不过,作为高通今年下半年的旗舰芯片,骁龙8的综合表现还是颇为不错的,尤其是……选手机真的不能只注重所谓的性价比我们一般称性价比高的手机指的是那些售价较低且配置较为全面的机型,这种类型的手机受到许多用户的喜爱,也被很多人称为口头当中的好手机,但一台好手机的定义真的就和性价比直接挂钩了吗?……万科集团董事长郁亮称刚需仍强劲,房地产市场仍是个10万亿市场在今年的中期业绩推介会上,万科董事会主席郁亮表示,住房的刚性需求仍然很强,依然是个十万亿量级的巨大市场,常做常有,常做常新。按照当前新开工的降幅,新建住宅还达不到自然更新所需要……这才是索尼最强旗舰微单索尼A7R5旗舰微单相机10月26日,索尼正式发布Alpha7RV旗舰微单相机。机身依旧紧凑轻便,宽大的手柄握持感还不错。镁合金机身防尘防滴,应对雨雪天气丝毫无压力。加入……
图发财树怎么剪枝更好这样操作才正确养发财树的人很多,但养得很好的并不多。看着家里的发财树半死不活的,很多人都会觉得特别着急。其实出现这种情况,朋友们可以用修剪的方式来让植株变得更茂盛。发财树是比较漂亮的观……拼多多双11助力领现金你们觉得靠谱吗?双11拼多多邀好友助力领钱的活动又开始了,这次金额有50元、100元、300元、500元和600元的。我一个朋友运气好50元提了3次,助力50元相对来说比较简单,我好友第一次提……图胧月叶插必知的技巧这样做出苗更快胧月株形及花色均具观赏价值,很适合家庭种植。它既适于盆栽、玻璃瓶内栽培,也适于吊篮栽培,很多朋友都利用其蔓生性将其悬挂在墙壁上,因而深受花友们的喜爱。胧月属于景天科,是一……图给雪纳瑞剃毛要遵循的原则尽量不要全身都剃光随着雪纳瑞不断地长大,狗狗身体的毛发也在不断生长。看到雪纳瑞身上的毛发,总让人觉得杂乱无章。为了让雪纳瑞看上去干净利落一些,不少主人会选择给雪纳瑞剃毛。雪纳瑞是梗类犬中比……图文竹变黄怎么挽救注意三点就能恢复如初文竹是极易成活的观赏植物,已经成为很多花友钟爱的绿植。文竹造型独特,在花市也比较畅销。但是文竹在养殖不当的情况下,也会出现一些病变,比如叶子发黄,这让人很担心。文竹是现在……图迷你雪纳瑞好养吗狗狗不掉毛无异味适合家养雪纳瑞含有贵宾犬和德国刚毛杜宾犬的血统。该犬种的主要特征就是长有老头一般的眉毛和胡须。一般来说,雪纳瑞犬按体型可分为小型、标准型和大型等三种。雪纳瑞犬属于梗类犬,却也有自……图栀子花叶子干枯怎么办这样处理更轻松对于养花爱好者而言,栀子花叶子干枯的问题都一直困扰着人们。可见这个问题是比较棘手的,花友们也深受困扰。其实朋友们只需掌握一些技巧,就能很好地解决这个问题。栀子花是深受人们……图柯基犬怎么断尾更安全这样给狗狗做手术才不会感染对柯基犬不了解的朋友都会好奇一个问题,那就是柯基犬为什么没有尾巴?其实柯基犬原来也是有尾巴的,只是在幼犬的时候就被剪断了。这才导致现在所看到的成犬没有尾巴。给柯基犬断尾已……图非洲菊花语及传说俏皮话也能流传千古非洲菊经常给人一种快乐且阳光的形象,那么你知道非洲菊的花语是什么么?它们又有什么样的传说故事呢?今天,我们今天就为大家好好介绍一下关于非洲菊的花语。一、永远快乐。非……2022年18月鄂尔多斯财政收入表现,准格尔旗领先全市鄂尔多斯今年的财政收入令人瞩目,18月其财政收入628。3亿元,同比增长67。7,扣除留抵退税因素后增长72。9。其中,税收收入538。7亿元,同比增长81。8;非税收入89。……图全年露养白凤并不难注意三点多肉状态更美提起多肉植物白凤,诗人白居易曾经有一句诗,叫做温泉水滑洗凝脂,那种凝脂如玉的肌肤,用在白凤身上一点儿也不为过。白凤已经成为人们特别喜欢的多肉之一。白凤是景天科的一种多肉植……图拉布拉多犬和金毛的区别3种介绍教您区分它们在生活中,很多喜爱宠物的人士对于狗这种宠物可谓是喜爱有加。对于拉布拉多和金毛犬来说它们性格温顺,讨人喜欢。对于外形十分相似的它们您了解多少呢?狗狗是人类天生的朋友,它也是……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网