、BeautifulSoup简介
BeautifulSoup是Python爬虫应用解析Html的利器,是Python三方模块bs4中提供的进行HTML解析的类,可以认为是一个HTML解析工具箱,对HTML报文中的标签具有比较好的容错识别功能。lxml是一款html文本解析器,BeautifulSoup构建对象时需要指定HTML解析器,推荐使用lxml。
BeautifulSoup和lxml安装命令:
1.pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bs4
2.pip install -i https://pypi.tuna.tsinghua.edu.cn/simple lxml
加载BeautifulSoup:
1.from bs4 import BeautifulSoup
BeatifulSoap解析HTML报文的常用功能:
通过标签的contents属性,可以访问其下嵌套的所有下级HTML元素,这些该标签下的子标签对应的HTML元素放到一个contents 指向的列表中。
如:print(soup.body.contents)
可以访问标签对应的父、子、兄弟及祖先标签信息;
使用strings属性迭代访问除标签外的所有内容;
可以使用find、find_all、find_parent、find_parents等系列方法查找满足特定条件的标签;
使用select通过css选择器定位特定标签。
二、一些解析技巧
在HTML解析时,如果通过简单的tag、或单个tag属性(如id、class)或文本一次搜索或select定位是最简单的,而有些情况需要使用组合方法才能处理。
2.1、通过标签的多个属性组合定位或查找
经常有些要定位的标签有很多,按单个属性查找也有很多,得使用多个属性查找。如:
上面的html文本中有多个id为article_content的div标签,如果使用:
就会返回两条记录。这时候就可以使用多标签属性定位的如下4种语句:
以上四种方式是等价的,因为id可以用#来标记,class在查找时需要和Python关键字class区分,因此有上述不同方法,注意select的每个属性必须用中括号括起来,不同属性的中括号之间不能有空格,如果有空格表示的就不是查找同一标签的属性,空格后的属性表示前一个属性对应标签的子孙标签的属性。
2.2、利用tag标签关系定位内容
tag标签关系包括父子、兄弟、祖先等关系,有时要查找或定位的内容本身不是很好定位,但结合其他标签关系(主要是父子、祖先关系)则可以唯一确认。
案例:
这是博文中关于博主个人信息的部分报文:
以上报文中,如果要取博主的原创文章数和周排名,原创文章数和博主周排名的tag标签完全相同,二者都在span标签内,标签的属性及值都相同,只是span标签的父标签dt标签的兄弟标签dd标签的string的中文内容才能区分。对于这种情况,首先要通过祖先标签<div class="data-info d-flex item-tiling">定位到祖先标签,再在祖先标签内通过中文字符串定位到要访问属性的兄弟标签的子标签,然后通过该子标签找到其父标签的父标签,再通过该父标签的dt子标签的span子标签访问具体取值。
示例代码如下:
注意:上面的select使用的也是标签的属性来定位标签,并且两个中括号之间有空格,表明后一个要查找的标签在前一个属性对应标签的子孙标签范围内。
2.3、分析前去除程序代码避免干扰
在解析HTML报文时,绝大多数情况是需要分析有用的标签信息,但作为技术文章,大部分的博文中都有代码,这些代码可能会对分析进行干扰。如本文中的代码含有一些分析的HTML报文,如果获取本文的完整HTML内容,这些报文在非代码部分也会出现,此时要排除代码的影响,可以将代码先从分析内容中去除再来分析。
目前大多数技术平台的博文编辑器都支持对代码的标识,象markdown等编辑器代码的标签为code标检,如果有其他编辑器用不同标签的,只有确认了标签名,都可以按下面介绍的类似方式来处理。
处理步骤如下:
获取报文;
构建BeatifulSoap对象soup;
通过soup.code.extract()或soup.code.decompose()方式就从soup对象中去除了代码部分,decompose方法与extract方法的区别就是decompose直接删除对应对象数据而extract再删除时将删除对象单独返回。
三、小结
本文介绍了使用BeatifulSoap解析HTML报文的三个使用技巧,包括通过多属性组合查找或定位标签、通过结合多个标签关系来定位标签以及去除html报文中的代码标签来避免代码对解析的影响。
写字不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
————————————————
版权声明:本文为转载文章,如有侵权,请联系作者删除。
家好,我是Python进阶者。
前几天在Python最强王者交流群【ZXS】问了一个Python网络爬虫实战问题。问题如下:
我这里遇到一个问题:【爬取免费IP代理时,无法解析到数据】, 我通过 xpath,css定位到了元素,但是在运行时返回空列表,请问我该怎么解决呀 以下是解析数据的截图:
他自己提供了数据和写的代码如下:
不过代码得到的结果不是自己想要的。
这里【吴超建】给了一个思路:css貌似写得不对。并且给出了对应html解析。
后来才发现粉丝自己把网站搞错了,真是太尴尬了。
不过针对粉丝当前的代码,不换网站的话,修改xpath后也是可以跑的通的。
顺利地解决了粉丝的问题。
如果你也有类似这种Python相关的小问题,欢迎随时来交流群学习交流哦,有问必答!
通过这个粉丝需求问答,我们确切的感受到了AI助力Python实战需求的能力了,我最近也是一直在接触AIGC,从最开始的ChatGPT到最近火爆出圈的Sora,也建立了自己的AIGC分享群,目前也带动了500以上的AIGC爱好者一起学习,群里每周都会分享AIGC相关的内容,从认识AIGC,到使用AIGC,再到利用AIGC变现,我会带大家一起进军AIGC时代。大家可以在后台加我v,我拉你们进入AIGC学习群!
大家好,我是Python进阶者。这篇文章主要盘点了一个Python库安装的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。
最后感谢粉丝【ZXS】提出的问题,感谢【吴超建】给出的思路,感谢【莫生气】等人参与学习交流。
【提问补充】温馨提示,大家在群里提问的时候。可以注意下面几点:如果涉及到大文件数据,可以数据脱敏后,发点demo数据来(小文件的意思),然后贴点代码(可以复制的那种),记得发报错截图(截全)。代码不多的话,直接发代码文字即可,代码超过50行这样的话,发个.py文件就行。
网页开发过程中,我们有时会遇到HTML页面白屏的问题,即打开网页时页面显示空白,没有任何内容。这不仅令用户困惑,也使开发者头疼不已。本文将分享一些常见的HTML页面白屏问题解决方法,帮助你快速解决这个问题,让你的网页焕然一新!
第一步:检查HTML代码
首先,我们需要检查HTML代码是否正确。常见的错误包括标签未闭合、标签嵌套错误等。这些错误可能会导致页面无法正常显示。因此,仔细检查HTML代码,确保没有语法错误是解决白屏问题的第一步。
第二步:检查CSS文件
HTML页面的样式通常由CSS文件控制。如果CSS文件中存在错误或者无法正常加载,可能会导致页面白屏。我们可以通过以下步骤检查CSS文件是否存在问题:
1、检查CSS文件路径是否正确:确保CSS文件的路径正确,并且文件存在于指定的位置。可以通过浏览器开发者工具查看网络面板,检查CSS文件是否被成功加载。
2、检查CSS文件语法错误:使用CSS验证工具,如W3C CSS验证服务,检查CSS文件是否存在语法错误。如果存在错误,及时修复。
3、检查CSS选择器和样式规则:检查CSS文件中的选择器和样式规则是否正确。可能存在选择器与HTML元素不匹配或样式规则冲突的情况。可以通过逐个注释掉样式规则,逐步排查问题。
第三步:检查JavaScript代码
JavaScript代码也可能导致页面白屏。以下是检查JavaScript代码的步骤:
1、检查JS文件路径是否正确:与CSS文件类似,确保JS文件的路径正确,并且文件存在于指定的位置。通过浏览器开发者工具查看控制台面板,检查是否有JS文件加载错误的提示信息。
2、检查JS代码语法错误:使用JS语法检查工具,检查JS代码是否存在语法错误。如果有错误,及时修复。
3、检查JS代码逻辑错误:检查JS代码中的逻辑是否正确。可能存在变量未定义、函数未调用或者逻辑错误等问题。可以通过调试工具,如浏览器开发者工具中的调试器,逐步排查问题。
第四步:排查网络请求问题
如果前面的步骤都没有发现问题,那么可能是网络请求出现了问题。以下是一些排查网络请求问题的方法:
1、检查网络连接:确保你的设备已连接到互联网,并且网络连接稳定。
2、检查资源加载状态:通过浏览器开发者工具的网络面板,检查页面中的资源加载状态。可能存在资源加载失败或者超时的情况,导致页面白屏。
3、检查服务器配置:如果你使用了服务器端脚本语言,如PHP,检查服务器配置是否正确。可能存在服务器配置问题导致页面无法正确渲染。
第五步:优化页面性能
如果以上方法都没有解决问题,那么可能是页面性能问题导致白屏。以下是一些优化页面性能的方法:
1、压缩和合并文件:将CSS和JS文件进行压缩和合并,减少文件的大小和数量,提高页面加载速度。
2、使用缓存:利用浏览器缓存机制,将静态资源进行缓存,减少服务器的请求次数,提高页面加载速度。
3、异步加载资源:使用异步加载技术,如异步加载JS文件或使用延迟加载,减少页面加载时间。
4、减少HTTP请求:减少页面中的HTTP请求次数等。
结语:
通过以上五个步骤,我们可以逐步排查HTML页面白屏问题,并解决它们。不同的问题可能需要不同的解决方法,因此需要耐心和细心地分析和排查。在开发过程中,我们也要时刻关注页面性能,优化页面加载速度,提高用户体验。
*请认真填写需求信息,我们会在24小时内与您取得联系。