相当于对应一个HTML/XML文档的全部内容
使用:
from bs4 import BeatifulSoup
soup=BeatifulSoup(‘<p>data</p>’,’html.parser’)
Beatiful Soup类的基本元素
import requests
r=requests.get('https://python123.io/ws/demo.html')
demo=r.text
标签树的下行遍历
标签树的下行遍历,遍历儿子节点
for child in soup.body.children:
print(child)
标签树的上行遍历
soup=BeatifulSoup(demo,'html.parser')
for parent in soup.a.parents:
if parent is None:
print(parent)
else:
print(parent.name)
标签树的平行遍历
for sibling in soup.a.next_siblings:
print(sibling)
for siblings in soup.a.previous_siblings:
print(sibling)
bs4的格式化输出
soup.prettify():机器方便阅读
print(soup.prettify()):变成html人方便阅读模式
信息标记
XML:
eXtensible Markup Language(标签表达)
JSON:
javaScript object Notation(有类型的键值对
'key':['value1','value2']
'key':'value'
'key':{'subkey':'subvalue'})
YAML:
YAML Ain't Markup Language(无类型键值对
key:#Comment
-value1
-value2
key:
subkey:subvalue
-表达并列关系
name:
-北京理工大学
-延安自然科学院
| 表达整块数据 #表示注释
text:|#学校介绍)
信息提取一般方法
方法一:完整解析信息的标记形式,再提取关键信息。
XML,JSON,YAML
需要标记解析器 例如:bs4库的标签树遍历,准确,速度慢
方法二:无标记形式,直接搜索关键信息
搜索
对信息的文本查找函数即可
简介速度快,提取结果准确性与信息内容相关
实例
提取HTML中所有URL链接
1)搜索所有a标签
2)解析a标签,提取url后的链接内容
for link in soup.find_all('a'):
print(link.get('href'))
功能:
输入:大学排名URL链接
(http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html)
输出:大学排名信息的屏幕输出
定向爬虫:对输入链接爬取数据
技术路线:requests-bs4
步骤一:获取大学排名网页内容
getHTMLText()
步骤二:提取网页内容中的信息到合适得数据结构
fillUnivList()
步骤三:利用数据结构展示并输出结果
printUnivList()
拓展
format