第二周 网络爬虫之提取 信息提取及中国大学排名实例
信息标记的三种形式:
1 XML
2 JSON
3 YAML
实列:提取HTML中所有URL链接
find_all(name,attrs,recursive,string,**kwargs)
1.name: 对标签名称的检索字符串。
2.attrs :对标签属性值的检索字符串,可标注属性检索。
3.recursive: 是否对子孙全部检索,默认True
4.string:<>..</>中字符串区域的检索字符串、
‘
<tag>(..) 等价于 <tag>.find_all(..)
soup(..) 等价于 soup.find_all(..)
拓展方法:
实列 中国大学排名
爬取网址:http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html
程序结构设计
步骤1:从网络上获取大兴排名网页内容 getHTMLText()
步骤2:提取网页内容中信息到合适的数据结构 fillUnivList()
步骤3:利用数据结构展示并输出结构 printUnivList()
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)))
全代码:
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) main()