1.信息标记的三种形式
标记后的信息可形成信息组织结构增加了信息维度
标记后的信息可用于通信、存储或展示
标记的结构与信息一样具有重要价值
标记后的信息更利于程序理解和运用
三种形式:XML、JSON、YAML
2.HTML的信息标记
H:hyper
T:text
M:markup
L:language
3.三种信息标记形式的比较
XML:最早的通用信息标记语言,可扩展性好,但繁琐
JSON:信息有类型,适合程序处理(js),较XML简洁
YAML:信息无类型,文本信息比例高,可读性好
4.信息提取的一般方法
方法一:完整解析 信息的标记形式,再提取关键信息
需要标记解析器 例如:bs4库的标签树遍历
优点:信息解析准确
缺点:提取过程繁琐,速度慢
方法二:无视标记形式,直接搜索关键信息
对信息的文本查找函数即可
优点:提取过程简洁,速度较快
缺点:提取结果准确性欲信息内容相关
5.实例
提取HTML中所有URL链接
思路:(1)搜索到所有<a>标签
(2)解析<a>标签格式,提取href后的链接内容
<>.find_all(name,attrs,recursive,string,**kwargs)
返回一个列表类型,存储查找的结果
name:对标签名称的检索字符串
attrs:对标签属性值的检索字符串,可标注属性检索
recursive:是否对子孙全部检索,默认为True
string:<>...</>中字符串区域的检索字符串
6中国大学排名定向爬虫
功能描述
输入:大学排名的URL连接
输出:大学排名信息的屏幕输出(排名,大学名称,总分)
技术路线:requests-bs4
定向爬虫:仅对输入URL进行爬取,不扩展爬取
步骤1:从网络上获取大学排名网页内容
getHTMLText()
步骤2:提取网页内容中信息到合适的数据结构
fillUnivList()
步骤3:利用数据结构展示并输出结果
printUnivList()
#CrawUnivRankingB.py
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[3].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) # 20 univs
main()