结合requests函数和beautifulsoup函数爬取静态网站中的表格。
非原创,是从北京理工大学【Python网络爬虫与信息提取】MOOC公开课上学习的
需要引入的包有:
import requests
from bs4 import BeautifulSoup
import bs4
爬虫的框架主要是三个函数
- getHTHLText(url)
利用request获取网站信息。输入url,输出网站信息 - fillUnivLsit(ulist,html)
将网站信息解析,并存入列表。输入网站信息,生成列表。无输出。 - printUnivList(ulist,num)
打印列表。打印时注意中文字符的对齐问题。
def getHTHLText(url):
try:
r = requests.get(url, timeout = 30)
r.raise_for_status()
r.encoding=r.apparent_encoding
return r.text
except :
return ""
def fillUnivLsit(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}"
#{3}是指在打印学校名称时,在需要填充时,使用format函数的第三个变量
print(tplt.format("排名","学校名称","总分", chr(12288)))
#中文字符宽度不够时,系统默认采用西文空格字符进行填充,但中西文字符宽度不同。采用中文字符的空格填充 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.com/zuihaodaxuepaiming2019.html'
html=getHTHLText(url)
fillUnivLsit(uinfo, html)
printUnivList(uinfo, 20)
main()
未对齐的输出结果
对齐后的输出结果