1 信息標記的三種方式:html
XML:app
JSON:函數
YAML:ui
1 縮進 表示所屬關係:
2 - 表示並列關係:url
3 | 表示整塊數據:spa
HTML----XML的一種形式:3d
2 信息提取的方法:code
信息提取的方法 1 完整解析信息的標記形式,再提取關鍵信息---須要標記解析器 優勢 信息解析準確 缺點 提取過程繁瑣 速度慢 2 無視標記信息,直接搜索關鍵字 搜索===對文本查找函數便可 優勢 信息解析速度快,過程簡潔 缺點 提取準確性低
形式解析 + 正則(或者其餘匹配規則)---融合方法orm
3 基於bs4庫的HTML內容查找:htm
BeautifulSoup類的查找方法:
1 soup.find_all ( name,attrs,recursive,string,**kwargs )
from bs4 import BeautifulSoup import requests import re r=requests.get('http://www.baidu.com') demo=r.text[:1000] soup=BeautifulSoup(demo,'html.parser') # for tag in soup.find_all(id=re.compile('k')): # print(tag) print( soup.find_all('head') ) # 查找 head標籤 # print(soup.find_all(re.compile('a')),len(soup.find_all(re.compile('b'))))
例子 大學排名
# <tr class="alt"> <td>9</td> <td><div align="left">南京大學</div></td> <td>江蘇</td> <td>87.1 </td> </tr>
from bs4 import BeautifulSoup import requests def getHTMLText(url): try: r=requests.get(url) r.raise_for_status() r.encoding=r.apparent_encoding return r.text except: print('error!!') def fillUniverList(ulist,html): soup=BeautifulSoup(html,'html.parser') for tr in soup.find('tbody').children: if not isinstance(tr,str): tds=tr.find_all('td') ulist.append([tds[0].string,tds[1].string,tds[2].string]) def printUniverList(ulist,num): print('{0:^10}\t{1:^10}\t{2:^10}'.format('排名','學校名稱','總分')) for i in range(num): u=ulist[i] print('{0:^10}\t{1:^10}\t{2:^10}'.format(u[0], u[1], u[2])) def main(): ulist=[] url='http://www.zuihaodaxue.cn/shengyuanzhiliangpaiming2017.html' html=getHTMLText(url) fillUniverList(ulist,html) printUniverList(ulist,20) # 20 unis main()