一、BeautifulSoup库入门
1、BeautifulSoup库的导入
用以下代码导入 BeautifulSoup 库,注意 BeautifulSoup 的 B 和 S 要大写:
from bs4 import BeautifulSoup
2、常用的BeautifulSoup解析器:
解释器 | 使用方法 | 条件 |
html | BeautifulSoup(MK,‘html.parser’) | bs4库 |
lxml | BeautifulSoup(MK,‘lxml’) | lxml库 |
xml | BeautifulSoup(MK,‘xml’) | lxml库 |
html5lib | BeautifulSoup(MK,‘html5lib’) | html5lib库 |
3、BeautifulSoup 类的基本元素
基本元素 | 说明 |
tag | 标签 |
name | 标签的名字,<p……</p>的名字即为p |
attributes | 标签的属性, <tag>.name |
NavigableString | 标签内非属性字符串, <tag>.string |
Comment | 标签内字符串的注释部分 |
元素所对应的部分:
标签树的下行遍历:
.contents 子节点列表
.children 子节点迭代
.descendants 子孙节点迭代
标签树的上行遍历:
.parent
.parents
标签树的平行遍历:(注意平行遍历必须发生在同一个父节点下)
next_sibling 下一个平行节点
previous——sibling 上一个平行节点
next_siblings 下一个平行节点迭代
previous——siblings 上一个平行节点迭代
4、基于bs4的html编码与现实
prettify() 方法:可以让html页面分行显示,自动加入换行符。
二、信息标记与提取
1、常见的信息标记形式:
XML 标签化语言 Internet数据传输
JSON 键值对(有类型) 移动应用云端与节点的数据通讯,无注释
YMAL 键值对(无类型) 系统配置文件,有注释
1、常见的信息标记提取:
1、形式解析:例如用解析器遍历标签树
2、直接搜索:<>.find_all() <>.find等方法
soup.find_all(string = "Hello world")
import re
soup.find_all(string = re.compile("hello world"))
因为太常用,所以存在简写形式:
<tag>(…) 可以代表 <tag>.find_all(…)
soup(…) 可以代表 soup.find_all(…)
同时存在以下扩展方法:
实例代码:
import requests
from bs4 import BeautifulSoup
import bs4
def getHTMLText(url):
try:
r = requests.get(url, timeout = 30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
def fillUnivList(ulist, 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 printUnivList(ulist, num):
tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
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():
uinfo = []
url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'
html = getHTMLText(url)
fillUnivList(uinfo, html)
printUnivList(uinfo, 20)
main()
特别的,如下
{1:{3}^10}
这里的 {3} 指的是用format后面的第三号位 chr(12288) 中文空格符来填充,保证了最后打印的格式可以居中对齐