爬虫(4)—— Beautiful Soup
发布日期:2021-05-07 08:57:23 浏览次数:16 分类:精选文章

本文共 1967 字,大约阅读时间需要 6 分钟。

Beautiful Soup入门

简介:

Beautiful Soup 库是解析、遍历、维护“标签树”的功能库
BeautifulSoup最主要的功能是从网页抓取数据,Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。

安装:

使用cmd命令行,输入命令:pip install beautifulsoup4

库的基本使用

from bs4 import BeautifulSoupsoup=BeautifulSoup('

data

','html.parser')soup=BeautifulSoup(open('D:abc.html'),'html.parser')

第一个参数html代码,第二个参数解析HTML的解析器

BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器

对Beautiful Soup库的检测

import requestsfrom bs4 import BeautifulSoupr = requests.get('http://python123.io/ws/demo.html')demo = r.textsoup = BeautifulSoup(demo, 'html.parser')print(soup.prettify())   # 将获取的代码以html结构进行输出

Beautiful Soup库解析器

在这里插入图片描述
Beautiful Soup类的基本元素
在这里插入图片描述
关于上述元素的一些使用

# 获取HTML的titleimport requestsfrom bs4 import BeautifulSoupr = requests.get('http://python123.io/ws/demo.html')demo = r.textsoup = BeautifulSoup(demo, 'html.parser')print(soup.title)# 获取HTML中的某个标签,如果存在多个相同的标签只会返回第一个标签tag = soup.aprint(tag)# 获取HTML的a标签的标签名print(soup.a.name)# 获取a标签父标签的标签名print(soup.a.parent.name)# 获取a标签父标签的父标签的标签名print(soup.a.parent.parent.name)# 获取标签的所有属性(标签的属性会以字典的形式输出)print(soup.a.attrs)# 获取标签某个属性的具体值print(soup.a.attrs['href'])# 获取标签中的具体信息print(soup.a.string)

HTML的遍历

标签树的下行遍历:

在这里插入图片描述
常见的使用

# 获取某个标签的儿子标签,返回值是包含所有儿子标签的列表head = soup.headprint(head)print(head.contents)# 遍历儿子节点(注换行符也算一个标签)for child in soup.body.children:    print(child)

标签树的上行遍历

在这里插入图片描述
例:对a标签的上行遍历

for parent in soup.a.parents:    if parent is None:        print(parent)    else:        print(parent.name)

标签树的平行遍历

在这里插入图片描述
注:
1、平行遍历必须发生在同一个父节点下的各个节点间
2、平行遍历不一定得到标签,需要进行一定的判断处理
3、平行遍历中,文本字符串也会被看作标签

例:

# 对a标签进行后续遍历for sibling in soup.a.next_siblings:    print(sibling)# 对a标签进行前续遍历for sibling in soup.a.previous_siblings:    print(sibling)

信息组织的提取

find_all()

在这里插入图片描述
常见的用法:

# 查找a标签a=soup.find_all('a')print(a)# 查找多个标签a=soup.find_all(['a','p'])print(a)# 查找HTML中有那些标签for tag in soup.find_all(True):    print(tag.name)# 查找含有course属性值的p标签print(soup.find_all('p',{   'course'}))# 查找id为link1的标签print(soup.find_all(id='link1'))

扩展方法

在这里插入图片描述

上一篇:wait和sleep
下一篇:线程的交互

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年03月19日 16时47分51秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章