Beautiful Soup库也叫beautifulsoup4,还叫bs4
import requests
url="https://www.python123.io/ws/demo.html"
r=requests.get(url)
r.text
#输出html界面内容
demo=r.text
from bs4 import BeautifulSoup
soup=BeautifulSoup(demo,"html.parser") #demo可以换成open("本地文件地址")
print(soup.prettify())
#此时的html页面是带格式的
Beautiful Soup库是解析、维护、遍历“标签树”的功能库。只要提供的文件类型是标签树的形式,BeautifulSoup库都可以对该文件进行解析。
from bs4 import BeautifulSoup
import bs4
*BeautifulSoup对应一个HTML/XML文档的全部内容
1.Tag:标签,最基本的信息阻止单元,分别用<>和>表明开头和结尾;
2.Name:标签的名字,< p>…< /p>的名字是"p",格式:< tag >.name;
3.Attributes:标签的属性,字典形式组织,格式:< tag >.attrs;
4.NavigableString:标签内非属性字符串,<>…>中字符串,格式:< tag >.string【可以跨越多个层次】
5.Comment:标签内字符串的注释部分,一种特殊的Comment类型。
使用示范
import requests
from bs4 import BeautifulSoup
url="https://www.python123.io/ws/demo.html"
r=requests.get(url)
demo=r.text
soup=BeautifulSoup(demo,"html.parser")
soup.title #查看页面的标题
tag=soup.a #tag为a标签
tag #输出第一个遇到的tag的内容
#标签名的使用
soup.a.name #输出a标签的名字
soup.a.parent.name #输出a标签的父标签的名字
soup.a.parent.parent.name #输出a标签的父标签的父标签的名字
tag.name #也可以用这种形式输出 soup.a.name一样的效果
#属性的使用
tag.attrs #查看标签的属性
tag.attrs['class'] #获取class属性的值
tag.attrs['href'] #获取a标签的链接属性
type(tag.attrs) #查看标签的属性的类型(输出是字典类型)
type(tag) #查看标签的类型(输出是bs4的标签类型)
#注释的使用
newsoup=BeautifulSoup("Hi!
","html.parser")
newsoup.b.string
type(newsoup.b.string)
newsoup.p.string
type(newsoup.p.string)
1…content:子节点的列表,将< tag >所有儿子节点存入列表;【仅获得当前节点的下一层的信息】
2…children:子节点的迭代类型,与。contents类似,用于循环遍历儿子节点;【仅获得当前节点的下一层的信息】
3…descendants:子孙节点的迭代类型,包含所有子孙节点,用于循环遍历。【可以获得当前节点的下面的所有层的信息】
1 .parent:节点的父亲标签;
2 .parents:节点先辈标签的迭代类型,用于循环遍历先辈节点。【上行遍历】
.next_sibling:返回按照HTML文本顺序的下一个平行节点标签;
标签的平行遍历的下一个内容不一定为标签,也有可能是NavigableString
.previous_siblings:返回按照HTML文本顺序的上一个平行节点标签;
标签的平行遍历的前一个内容也不一定为标签,有可能是文本内容
使用bs4的prettify()方法,可以更好地显示html文件的格式。【bs4使用的编码形式默认为utf-8】
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 printU(ulist,num):
print("{:^10}\t{:^6}\t{:^10}".format("排名","学校名称","总分"))
for i in range(num):
u=ulist[i]
print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))
def main():
uinfo=[]
url='http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'
html=getHTMLText(url)
fillUnivList(uinfo,html)
printU(uinfo,30)
main()
使用中文字符的填充:chr(12288).
def printU(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)))
小曦有话说:感谢路过的各位能够看到这里,本篇内容是学习嵩天教授的Python网络爬虫与信息提取课程的笔记,感兴趣的您可以前去溜溜。本篇文章为视频的学习笔记