如何查看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
您可能感兴趣
- python中的冒号怎么看(python 列表中[ ]中冒号‘:’的作用)
- python中的变量与变量类型(Python变量类型知识点总结)
- python串口怎么使用(使用Python3+PyQT5+Pyserial 实现简单的串口工具方法)
- python怎么操作mysql(详解Python的数据库操作pymysql)
- python单例模式读取配置文件(Python下简易的单例模式详解)
- python怎么取出列表(Python 利用切片从列表中取出一部分使用的方法)
- python创建文件夹(python批量创建指定名称的文件夹)
- python下载后依然打不开文件(解决python打不开文件文件不存在的问题)
- python为什么使用logging(python中logging模块的一些简单用法的使用)
- python中if判断数据类型(基于python if 判断选择结构的实例详解)
- python集合类(Python数据类型之Set集合实例详解)
- python实现列表删除重复元素(Python代码实现删除一个list里面重复元素的方法)
- python有什么好的微信公众号(python下载微信公众号相关文章)
- python撤回的微信消息怎么看(Python实现微信消息防撤回功能的实例代码)
- python列表怎么赋值(详解Python列表赋值复制深拷贝及5种浅拷贝)
- python利用空列表进行数字排序(python实现计数排序与桶排序实例代码)
- 岳云鹏不说相声,改行演员了 网友 快回来说相声(岳云鹏不说相声)
- 乔欣首演古装大女主,颜值演技双在线(乔欣首演古装大女主)
- 于正又推女性古装大剧 杨蓉乔欣演女配,两位女主成 重头戏(于正又推女性古装大剧)
- 乔欣古装女主戏获热度 作为女主,却没吃到红利(乔欣古装女主戏获热度)
- 爱情是什么(爱情是什么最经典的话)
- 乔欣 古装剧中的高颜值(古装剧中的高颜值)
热门推荐
- javascript执行类的所有方法(Javascript中异步等待的深入理解)
- laravel数据库关联查找(laravel 操作数据库常用函数的返回值方法)
- vue走马灯特效(Javascript结合Vue实现对任意迷宫图片的自动寻路)
- 如何用python创建单链表(Python3实现的反转单链表算法示例)
- dedecms替换条件(织梦cmsDEDECMS通过正则批量查找替换数据库的自定义内容)
- dedecms有哪些功能(织梦DedeCMS v5.7全文检索使用说明sphinx)
- qq表情符号对应的代码
- yii框架使用教程(Yii框架操作cookie与session的方法实例详解)
- zabbix5.4监控磁盘可用内存大小(解析Zabbix 5.0磁盘自动发现和读写监控的问题)
- php对接微信付款(PHP微信支付功能示例)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9