from bs4 import BeautifulSoup import bs4 import requests def gethtmltxt(url): try: r=requests.get(url,timeout=30) r.raise_for_status() r.encoding=r.apparent_encoding return (r.text) except: return "" def culi(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 printhanshu(ulist,num): a="{:^10}{:^6}{:^10}" print(a.format("排名","學校","地域")) for i in range(num): u=ulist[i] print(a.format(u[0],u[1],u[2])) def main(): unifo=[] url="http://www.zuihaodaxue.com/zuihaodaxuepaiming2016.html" html=gethtmltxt(url) culi(unifo,html) printhanshu(unifo,20) main()
不停報錯,結果是網址錯了,光靠編輯器提示難以發現錯誤啊,還是排除法好用
修改了一下,對齊了現在。
# -*- coding: utf-8 -*- """ Created on Sat Jan 5 20:53:23 2019 @author: Administrator """ #中間改成10 並且對a進行修改 使用chr(12288)中文空格填充解決對不齊的問題 from bs4 import BeautifulSoup import bs4 import requests def gethtmltxt(url): try: r=requests.get(url,timeout=30) r.raise_for_status() r.encoding=r.apparent_encoding return (r.text) except: return "" def culi(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 printhanshu(ulist,num): a="{0:^10}{1:{3}^10}{2:^10}" print(a.format("排名","學校","地域",chr(12288))) for i in range(num): u=ulist[i] print(a.format(u[0],u[1],u[2],chr(12288))) def main(): unifo=[] url="http://www.zuihaodaxue.com/zuihaodaxuepaiming2016.html" html=gethtmltxt(url) culi(unifo,html) printhanshu(unifo,20) main()
輸出如下
排名 學校 地域
1 清華大學 北京市
2 北京大學 北京市
3 浙江大學 浙江省
4 上海交通大學 上海市
5 復旦大學 上海市
6 南京大學 江蘇省
7 中國科學技術大學 安徽省
8 哈爾濱工業大學 黑龍江省
9 華中科技大學 湖北省
10 中山大學 廣東省
11 東南大學 江蘇省
12 天津大學 天津市
13 同濟大學 上海市
14 北京航空航天大學 北京市
15 四川大學 四川省
16 武漢大學 湖北省
17 西安交通大學 陝西省
18 南開大學 天津市
19 大連理工大學 遼寧省
20 山東大學 山東省
