所看视频: 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()

最新文章

  1. 压力测试相关之ab命令
  2. Java--Callable与返回值future
  3. 使用EmBitz开发STM32项目的环境配置
  4. [Bootstrap]7天深入Bootstrap(2)整体架构
  5. PetaPoco模糊查询
  6. Sql 行转列问题总结
  7. libevent for qt网络模块
  8. 实现koa中的generator用法
  9. [COGS 2258][HZOI 2015]复仇的序幕曲
  10. Spark 基本函数学习笔记一
  11. android studio gradle 打jar 包 (混淆+第三方库包)
  12. 吴恩达机器学习笔记4-代价函数III(cost function)
  13. angular框架下的跨域问题(获取天气数据)
  14. C# WebSocket模拟发送接收
  15. CentOS查看版本及架构信息
  16. 「2017 山东一轮集训 Day4」棋盘(费用流)
  17. HTML5学习笔记(四):H5中表单新增元素及改良
  18. Bad update sites
  19. php箭头符号
  20. ASP.NET Core 如何实现404错误跳转到主页

热门文章

  1. 题解【洛谷P2279】[HNOI2003]消防局的设立
  2. 实战【docker 镜像制作与使用】
  3. 如何安装和使用Maven
  4. 第10章-内部类II
  5. 红帽RHCE培训-课程1笔记内容
  6. 压缩和解压工具bandizip
  7. 一些基础但有趣的shell脚本
  8. Flask笔记1
  9. FTD vs FMC
  10. Go语言基础之runtime包