摘要
- 如何用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("div") soup.find_parent("div")
- 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'
没这个属性
就介绍这么多,应该可以覆盖大部分网页结构了吧~!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 魔兽世界wlk暗牧一键输出宏是什么 wlk暗牧一键输出宏介绍
- 群星.1996-红不让台语原唱2辑【福和唱片】【WAV+CUE】
- 郭书瑶.2009-爱的抱抱(EP)【种子音乐】【FLAC分轨】
- 郑瑞芬.1989-BE.MY.BABY【现代】【WAV+CUE】
- 花钱请人每周放30万只不咬人的蚊子 防治登革热传播
- 饭制《第一后裔》丧尸版弗蕾娜
- 贝克汉姆亲临!2024FC品类游戏嘉年华圆满落幕
- 「命轨爻错之翼」风之翼发放说明
- 《原神》前瞻特别节目回顾长图
- 米游币抽抽乐-原神专场现已开启!
- 黑鸭子2001《风情中国HQCD》[日本版][WAV+CUE]
- 陈杰洲1990-成人礼[滚石][WAV+CUE]
- MarkAanderud-HandsFree(2024)[24-44,1]FLAC
- 孙露《观心》1:1母盘直刻限量版[低速原抓WAV+CUE][361M]
- 钟志刚《汽车DJ玩主》[低速原抓WAV+CUE][1G]