学完技术是时候该磨磨刀了
爬取大学排名地址https://www.shanghairanking.cn/rankings/bcur/2020
我们的思想是这样的
废话不多说先上实验代码!!注意事项请看注释
import requests
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 = bs4.BeautifulSoup(html,"html.parser")#html.parser to parser the html
for tr in soup.find('tbody').children:#请注意children返回的是一个迭代类型也即是literator object而contents返回的是一个列表
if isinstance(tr,bs4.element.Tag):#filte String type
tds = tr('td')#findAll 返回的是一个列表类型
#print("这是打印的"+tds[0].contents[0])
ulist.append([tds[0].text,tds[1].text,tds[2].text])#记住这里不能用string
def printUnivList(ulist,num):
for i in range(num):
u=ulist[i]
print("{}{}{}".format(u[0],u[1],u[2]))
if __name__ == "__main__":
ulist = []
html = getHtmlText("https://www.shanghairanking.cn/rankings/bcur/2020")
fillUnivList(ulist,html)
printUnivList(ulist, 10)
输出结果
tds=tr(‘td’)正是findAll的缩写
print的format方法
输出格式问题的改进
fomat方法中的符号约定