如何查看python beautifulsoup(Python爬虫beautifulsoup4常用的解析方法总结)
类别:脚本大全 浏览量:1689
时间:2022-01-24 00:25:28 如何查看python beautifulsoup
Python爬虫beautifulsoup4常用的解析方法总结摘要
- 如何用beautifulsoup4解析各种情况的网页
beautifulsoup4的使用
关于beautifulsoup4,官网已经讲的很详细了,我这里就把一些常用的解析方法做个总结,方便查阅。
装载html文档
使用beautifulsoup的第一步是把html文档装载到beautifulsoup中,使其形成一个beautifulsoup对象。
|
import requests from bs4 import BeautifulSoup url = "http://new.qq.com/omn/20180705/20180705A0920X.html" r = requests.get(url) htmls = r.text #print(htmls) soup = BeautifulSoup(htmls, 'html.parser' ) |
初始化BeautifulSoup类时,需要加入两个参数,第一个参数即是我们爬到html源码,第二个参数是html解析器,常用的有三个解析器,分别是”html.parser”,”lxml”,”html5lib”,官网推荐用lxml,因为效率高,当然需要pip install lxml一下。
当然这三种解析方式在某些情况解析得到的对象内容是不同的,比如对于标签不完整这一情况(p标签只有一半):
|
soup = BeautifulSoup( "<a></p>" , "html.parser" ) # 只有起始标签的会自动补全,只有结束标签的灰自动忽略 # 结果为:<a></a> soup = BeautifulSoup( "<a></p>" , "lxml" ) #结果为:<html><body><a></a></body></html> soup = BeautifulSoup( "<a></p>" , "html5lib" ) # html5lib则出现一般的标签都会自动补全 # 结果为:<html><head></head><body><a><p></p></a></body></html> |
使用
在使用中,我尽量按照我使用的频率介绍,毕竟为了查阅~
- 按照标签名称、id、class等信息获取某个标签
|
html = '<p class="title" id="p1"><b>The Dormouses story</b></p>' soup = BeautifulSoup(html, 'lxml' ) #根据class的名称获取p标签内的所有内容 soup.find( class_ = "title" ) #或者 soup.find( "p" , class_ = "title" id = "p1" ) #获取class为title的p标签的文本内容"The Dormouse's story" soup.find( class_ = "title" ).get_text() #获取文本内容时可以指定不同标签之间的分隔符,也可以选择是否去掉前后的空白。 soup = BeautifulSoup( '<p class="title" id="p1"><b> The Dormouses story </b></p><p class="title" id="p1"><b>The Dormouses story</b></p>' , "html5lib" ) soup.find( class_ = "title" ).get_text( "|" , strip = True ) #结果为:The Dormouses story|The Dormouses story #获取class为title的p标签的id soup.find( class_ = "title" ).get( "id" ) #对class名称正则: soup.find_all( class_ = re. compile ( "tit" )) #recursive参数,recursive=False时,只find当前标签的第一级子标签的数据 soup = BeautifulSoup( '<html><head><title>abc' , 'lxml' ) soup.html.find_all( "title" , recursive = False ) |
- 按照标签名称、id、class等信息获取多个标签
|
soup = BeautifulSoup( '<p class="title" id="p1"><b> The like story </b></p><p class="title" id="p1"><b>The Dormouses story</b></p>' , "html5lib" ) #获取所有class为title的标签 for i in soup.find_all( class_ = "title" ): print (i.get_text()) #获取特定数量的class为title的标签 for i in soup.find_all( class_ = "title" ,limit = 2 ): print (i.get_text()) |
- 按照标签的其他属性获取某个标签
|
html = '<a alog-action="qb-ask-uname" href="/usercent" rel="external nofollow" target="_blank">蜗牛宋</a>' soup = BeautifulSoup(html, 'lxml' ) # 获取"蜗牛宋",此时,该标签里既没有class也没有id,需要根据其属性来定义获取规则 author = soup.find( 'a' ,{ "alog-action" : "qb-ask-uname" }).get_text() #或 author = soup.find(attrs = { "alog-action" : "qb-ask-uname" }) |
- 找前头和后头的标签
|
soup.find_all_previous( "p" ) soup.find_previous( "p" ) soup.find_all_next( "p" ) soup.find_next( "p" ) |
- 找父标签
|
soup.find_parents( "li" ) soup.find_parent( "li" ) |
- css选择器
|
soup.select( "title" ) #标签名 soup.select( "html head title" ) #多级标签名 soup.select( "p > a" ) #p内的所有a标签 soup.select( "p > #link1" ) #P标签内,按 id 查标签 soup.select( "#link1 ~ .sister" ) #查找相同 class 的兄弟节点 soup.select( "#link1 + .sister" ) soup.select( ".sister" ) #按class名称查 soup.select( "#sister" ) #按 id 名称查 soup.select( 'a[href="http://example.com/elsie" rel="external nofollow" ]' ) # 按标签的属性查 soup.select( 'a[href$="tillie"]' ) soup.select_one( ".sister" ) |
注意几个可能出现的错误,可以用try捕获来防止爬虫进程
- UnicodeEncodeError: ‘charmap' codec can't encode character u'\xfoo' in position bar (或其它类型的 UnicodeEncodeError
需要转码
- AttributeError: ‘NoneType' object has no attribute ‘foo'
没这个属性
就介绍这么多,应该可以覆盖大部分网页结构了吧~!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开心学习网的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/lk7688535/article/details/80924924
您可能感兴趣
- pythonsql注入检测(Python版Mssql爆破小脚本)
- python爬虫并保存excel实例(Python实现爬取亚马逊数据并打印出Excel文件操作示例)
- python渗透攻击(Python实现DDos攻击实例详解)
- jupyter如何编写python(windows系统中Python多版本与jupyter notebook使用虚拟环境的过程)
- 怎样使用python图像处理(Python Image模块基本图像处理操作小结)
- python环境怎么安装pip(python2.7 安装pip的方法步骤管用)
- python代码添加微信号(python 获取微信好友列表的方法微信web)
- python一组数字求和(Python3数字求和的实例)
- python udp网络编程(python实现一个简单的udp通信的示例代码)
- python真的能高效处理excel报表吗(Python数据报表之Excel操作模块用法分析)
- python学生管理系统设计代码(python学生管理系统开发)
- python爬虫爬取网页信息教程(python爬虫爬取微博评论案例详解)
- 如何学会python多线程(Python3多线程基础知识点)
- python 循环遍历新方法(python for 循环获取index索引的方法)
- pythontkinter循环显示文本(Python实现定时自动关闭的tkinter窗口方法)
- pythondocx安装教程(Python docx库用法示例分析)
- 提醒 2019年起河南驾考要开设科目五 官方回应来了(2019年起河南驾考要开设科目五)
- 省 市书法家协会 送万福进万家 活动走进禹州美丽乡村(省市书法家协会)
- 点赞 禹州苌庄正式撤乡建镇 未来发展不可估量(禹州苌庄正式撤乡建镇)
- 它荣获 中国生态魅力镇 称号 就在咱们禹州,一起来看看(中国生态魅力镇)
- 真牛 禹州将建成中等城市(禹州将建成中等城市)
- 被骂欺师灭祖,与郭德纲公开叫板,何云伟改名何沄伟,开始画画了(与郭德纲公开叫板)
热门推荐
- centos zabbix服务端(centos7.9安装zabbix5.0.14及配置过程)
- 私有云需要企业自己买服务器吗(企业如何对私有云主机进行管理?)
- dedecms中的有些功能如何修改(dedecms 栏目页面转换为单独页面)
- 如何用python爬取最新电影(使用python实现抓取腾讯视频所有电影的爬虫)
- dockerswarm滚动部署(使用Docker部署war包项目的实现)
- 如何建立ftp服务器(FTP是什么?如何搭建FTP服务器?)
- SQLServer日期函数总结案例详解(SQLServer日期函数总结案例详解)
- html如何设置图片高度和宽度(HTML如何让IMG自动适应DIV容器大小的实现方法)
- python与php(解决Python3 被PHP程序调用执行返回乱码的问题)
- php包含哪些(php文件包含的几种方式总结)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9