Beautisoup库
所看视频: https://www.bilibili.com/video/av9784617/?p=34
一, Beautifulsoup是一个可以从HTML或XML文件中提取数据的Python库,它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式
二,安装: pipenv install beautifulsoup4
import requests
from bs4 import BeautifulSoup r = requests.get('https://python123.io/ws/demo.html')
demo = r.text
# print(demo) soup = BeautifulSoup(demo, 'html.parser')
print(soup.prettify())
三,Beautiful Soup库的基本元素:
"""
Beautifulsoup类的基本元素:
1)标签: tag 最基本的信息组织单元, 分别用<>和</>标明开头和结尾
2)标签的名字: Name soup.标签.name
3)Attributes: 标签的属性, 字典形式组织, 格式 标签.attrs
4)NavigableString: 标签内非属性字符串, 标签.string
5)Comment: 标签内字符串的注释部分, 一种特殊的Comment类型
"""
# beautifulsoup 库的基本元素
# 获取 .a标签 第一个.a标签
# print(soup.a)
# 获取 title
# print(soup.title) # 获取a标签的名字
# print(soup.a.name)
# 获取a标签的父亲的名字
# print(soup.a.parent.name)
# 查看a标签的属性
# print(soup.a.attrs) # 字典格式
# print(soup.a.attrs['class'])
# print(type(soup.a.string)) # 有comment(注释)部分的处理
b = BeautifulSoup("<b><!--This is a comment --></b>", 'html.parser')
print(type(soup.b.string)) #
四,基于bs4的HTML内容遍历方法
# 基于bs4库的HTML内容遍历方法
"""
标签数的下行遍历
.contents 子节点的列表, 将<tag>所有儿子节点存入列表
.children 子节点的迭代类型,与.contents类似,用于循环遍历儿子节点
.descendants 子节点的迭代类型, 包含所有子孙节点,用于循环遍历
"""
# 获取head 和body的儿子节点
contens = soup.head.contents
body_list = soup.body.contents
# print(body_list[1]) # 遍历儿子节点
# for child in soup.body.children:
# print(child)
# # 遍历子孙节点:
# for child in soup.body.descendants:
# print(child) """
标签数的上行遍历
.parent 节点的父亲标签
.parents 节点先辈标签的迭代类型,用于循环遍历先辈节点
"""
# print(soup.head.parent)
# print(soup.head.parents) """
标签数的平行遍历 (条件 必须是一个父亲节点下的)
.next_sibling 返回按照HTML文本顺序的下一个平行节点标签
.previous_sibling 返回按照HTML文本顺讯的上一个平行节点标签
.next_siblings: 迭代类型, 返回按照HTML顺序的后续所有平行节点标签
.previous_siblings: 迭代类型, 返回按照HTML顺序的前序所有平行节点标签
"""
五,信息标记的三种形式:
1)xml: 最早的通用信息标记语言, 可扩展性好,但繁琐
2)json:信息有类型,适合程序处理(js), 较XML简洁
3)YAML: 无类型键值对, 文本信息比例最高
六,基于bs4库的HTML内容查找方法
1)find_all(name, attr, recursive, string, **kwargs)
返回一个类表类型,存储查找的结果
name: 对标签名称的检索字符串
attrs: 对标签属性值的检索字符串, 可标注属性检索
recursive: 是否对子孙全部检索, 默认为True
string:soup.find_all(string = 'Basic Python) 扩展方法:
1)<>.find(): 搜索且只返回一个结果,字符串类型,同.find_all()参数
2)<>.find_parents():在先辈节点中搜索,返回列表类型, 同find_all()参数
3)<>.find_parent(): 在先辈节点中返回一个结果, 字符串类型
4)<>.find_next_siblings():后续平行节点中搜索,返回列表类型
5)<>.find_next_sibling():后续平行节点返回一个结果,字符串类型
6)<>.find_previous_siblings(): 前序平行节点搜索,返回列表
7)<>.find_previous_sibling():前序平行节点返回一个结果,字符串类型
七,爬去最好大学 实例
def getHTMLText(url): # 从网络上获取大学排名网页内容 try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
# print(r.text)
return r.text
except:
return '' def fillUniversList(ulist, html): # 提取HTML核心信息 到合适的数据结构
soup = BeautifulSoup(html, 'html.parser')
for tr in soup.find('tbody').children:
if isinstance(tr, bs4.element.Tag): # 检测标签的类型
tds = tr('td')
ulist.append([tds[0].string, tds[1].string, tds[2].string]) def printUniversList(ulist, num): # 利用数据结构展示并输出结果
tplt = "{0:^10}\t{1:{3}^10}\t{2:^20}" # {3}表示使用中文来填充
print(tplt.format('排名', '学校', '分数', chr(12288))) # 中文对齐问题
for i in range(num):
u = ulist[i]
print(tplt.format(u[0], u[1], u[2], chr(12288))) def main():
unifo = []
url = 'http://www.zuihaodaxue.com/zuihaodaxuepaiming2018.html'
html = getHTMLText(url)
fillUniversList(unifo, html)
printUniversList(unifo, 20)
main()
Beautisoup库的更多相关文章
- 菜鸟Python学习笔记第一天:关于一些函数库的使用
2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...
- TinyWeb v1.0 正式完成第一个Release版本(功能基于 libuv 跨平台库)
使用方法很简单,很容易融入现有项目,使现有项目拥有Web网站功能和WebSocket,以及Socket直连! 并且包含了一个跨平台(windows/linux)工具集合; 嗯,也挺棒的^,^ 在项目中 ...
- 在 Laravel 中使用图片处理库 Integration/Image
系统需求 PHP >= 5.3 Fileinfo Extension GD Library (>=2.0) … or … Imagick PHP extension (>=6.5.7 ...
- [APUE]标准IO库(下)
一.标准IO的效率 对比以下四个程序的用户CPU.系统CPU与时钟时间对比 程序1:系统IO 程序2:标准IO getc版本 程序3:标准IO fgets版本 结果: [注:该表截取自APUE,上表中 ...
- [APUE]标准IO库(上)
一.流和FILE对象 系统IO都是针对文件描述符,当打开一个文件时,即返回一个文件描述符,然后用该文件描述符来进行下面的操作,而对于标准IO库,它们的操作则是围绕流(stream)进行的. 当打开一个 ...
- Python标准库--typing
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 Python 3.5 增加了一个有意思的库--typ ...
- Windows 常用运行库下载 (DirectX、VC++、.Net Framework等)
经常听到有朋友抱怨他的电脑运行软件或者游戏时提示缺少什么 d3dx9_xx.dll 或 msvcp71.dll.msvcr71.dll又或者是 .Net Framework 初始化之类的错误而无法正常 ...
- vs2010静态链接MFC库报链接错误
由于需要将MFC程序在其它电脑上运行,所以需要将动态链接的MFC改成静态链接,本以为很简单,没想到链接的时候出现下面的链接错误: uafxcw.lib(afxmem.obj) : error LNK2 ...
- Android 5.0 到 Android 6.0 + 的深坑之一 之 .so 动态库的适配
(原创:http://www.cnblogs.com/linguanh) 目录: 前序 一,问题描述 二,为何会如此"无情"? 三,目前存在该问题的知名SDK 四,解决方案,1 对 ...
随机推荐
- Python实验案例
Python 运算符.内置函数 实验目的: 1.熟练运用 Python 运算符. 2.熟练运用 Python 内置函数.实验内容: 1.编写程序,输入任意大的自然数,输出各位数字之和. 2.编写程序, ...
- P2P头部平台退出后,普通人如何避开投资理财的“雷区”?
编辑 | 于斌 出品 | 于见(mpyujian) 近期,P2P市场上不断传来不利消息,引起市场轩然大波,也打乱了投资者投资计划,是继续坚持自己的选择还是另择它路? 18日,陆金所作为千亿头部平台,宣 ...
- IQueryable、IEnumberable 、IList与List区别
IEnumerable:使用的是LINQ to Object方式,它会将AsEnumerable()时对应的所有记录都先加载到内存,然后在此基础上再执行后来的Query IQeurable(IQuer ...
- 全局下的isFinite
isFinite() 函数用于检查其参数是否是无穷大 1. 他是一个全局对象,可以在js代码中直接使用 2. isFinite() 函数用于检查其参数是否是无穷大. 3. 如果 number 是有限 ...
- 华硕笔记本(i76700hq+nvidia goforce940mx)安装ubuntu18.04
Ubuntu的安装 今天终于下定决心要把笔记本安装成Ubuntu,但是网上的教材不够全面,我就想整合以下教程. 接下来详细讲解安装过程 1. Ubuntu iso镜像下载 下载地址:https://w ...
- Git主库私库相关操作操作
命令1: git remote add 库名称 库地址 说明:写好的代码提交到两个git远端,git remote add是将另一个库地址设置进来 命令2: git fetch 库名称 分支名称 说明 ...
- SQLite - C/C++接口 API(一)
1.sqlite3_open(const char *filename, sqlite3 **ppDb) 该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据 ...
- Pipelines - .NET中的新IO API指引(一)
https://zhuanlan.zhihu.com/p/39223648 原文:Pipelines - a guided tour of the new IO API in .NET, part 1 ...
- Linux - 软硬链接,hard link and symbolic link
- 微信小程序开发调试阶段不校验请求域名
在微信小程序开发官网上有说明: 在开发者工具的右上角有详情选项,可以勾选不校验合法域名,之后就可以与本地ip进行通信了!