练习基础爬虫。对应的URL:​​http://www.zuihaodaxue.com/zuihaodaxuepaiming2018.html​

分析:

先获取对应的全部代码:

再次学习基础爬虫,爬取大学排名。_数据

查看一下获取了什么:

再次学习基础爬虫,爬取大学排名。_格式化输出_02

主函数中把其他的函数屏蔽掉。仅仅运行获取源代码所对应的函数:

结果:

总之很多!

接下来就研究别的!

稍微核心点的代码:

def filllist(ulist,html):
n = 1
soup = BeautifulSoup(html,"html.parser")
for tr in soup.find('tbody').children:
if isinstance(tr, bs4.element.Tag):#1.isinstance:判断一个对象是否是一个已知的类型,类似于type()
#上面的isinstance函数类似检查类型!
tds = tr('td')#存储为列表类型!
if n == 1:
print('tds类型:'+str(type(tds)))
n += 1
ulist.append([tds[0].string, tds[1].string, tds[2].string, tds[3].string])
#tds是刚才存储的所有td标签所对应的内容。
if n == 2:
print(type(ulist))
n += 1
print(ulist[:6])

其中,

for tr in soup.find('tbody').children:
为递归寻找所有符合条件的tr标签。

tds类型:tds类型:<class 'bs4.element.ResultSet'>

再次学习基础爬虫,爬取大学排名。_格式化输出_03

 

ulist.append([tds[0].string, tds[1].string, tds[2].string, tds[3].string])追加数据。

解决对齐:

输出未对齐是因为,中英文空格大小不一致所导致的!

那么使用中文空格进行填充即可解决问题:


chr(12288)


tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}" #{3}:表示用第三个参数进行填充!


总体代码:

import requests
import re
from bs4 import BeautifulSoup
import bs4
def gethtmltxt(url):
try:
r = requests.get(url,timeout = 30)
r.raise_for_status()
r.encoding = r.apparent_encoding
print('获取到的全部内容!')
# print(r.text)
return r.text
except:
print('error')
return ""
def filllist(ulist,html):
n = 1
soup = BeautifulSoup(html,"html.parser")
for tr in soup.find('tbody').children:
if isinstance(tr, bs4.element.Tag):#1.isinstance:判断一个对象是否是一个已知的类型,类似于type()
#上面的isinstance函数类似检查类型!
tds = tr('td')#存储为列表类型!
if n == 1:
print('tds类型:'+str(type(tds)))
n += 1
ulist.append([tds[0].string, tds[1].string, tds[2].string])
#tds是刚才存储的所有td标签所对应的内容。
if n == 2:
print(type(ulist))
n += 1
print(ulist[:6])
def printlist(ulist,num):
tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
#{3}:表示用第三个参数进行填充!
print(tplt.format("1","2","3",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/zuihaodaxuepaiming2018.html"
html = gethtmltxt(url)
filllist(uinfo,html)
printlist(uinfo,20)
print('see--uinfo')
# print(uinfo)
main()

结果:

再次学习基础爬虫,爬取大学排名。_格式化输出_04