Python网络爬虫--定向爬取中国大学排名

定向爬取中国大学排名

模块设计

目标网站:http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html

爬的是2019年的排名,先祭出框架。

1
2
3
4
5
6
7
8
9
10
11
import requests


def getHTMLText(url):
try:
res = requests.get(url)
res.raise_for_status()
res.encoding = res.apparent_encoding
return res.text
except:
return "异常"

再编写一个函数来提取关键信息,将每一条记录存入列表中。

1
2
3
4
5
6
7
8
import bs4


def fillUnivList(ulist, html):
soup = bs4.BeautifulSoup(html, "html.parser")
for tr in soup.find('tbody').children:
if isinstance(tr, bs4.element.Tag):
ulist.append([tr('td')[0].string, tr('td')[1].string, tr('td')[2].string, tr('td')[3].string])

涉及到节点的问题,这些子节点不仅有标签,还有注释,字符串。可以在源代码中看出来,也可以用type打印每一个节点查看它们的类型。所以要用isinstance判断类型。

接下来再写一个排版输出的函数

1
2
3
4
def printUnivRank(ulist, num):
print("{0:^16}\t{1:{3}^16}\t{2:^16}".format("排名", "学校名称", "位置", chr(12288)))
for i in range(num):
print("{0:^16}\t{1:{3}^16}\t{2:^16}".format(ulist[i][0], ulist[i][1], ulist[i][2], chr(12288)))

跟着视频做,据说是对齐问题,要用chr(12288)字符,就是中文的全角空格。
字段宽度可以适当的设大一点。

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import requests
import bs4


def getHTMLText(url):
try:
res = requests.get(url)
res.raise_for_status()
res.encoding = res.apparent_encoding
return res.text
except:
return "异常"


def fillUnivList(ulist, html):
soup = bs4.BeautifulSoup(html, "html.parser")
for tr in soup.find('tbody').children:
if isinstance(tr, bs4.element.Tag):
ulist.append([tr('td')[0].string, tr('td')[1].string, tr('td')[2].string, tr('td')[3].string])


def printUnivRank(ulist, num):
print("{0:^16}\t{1:{3}^16}\t{2:^16}".format("排名", "学校名称", "位置", chr(12288)))
for i in range(num):
print("{0:^16}\t{1:{3}^16}\t{2:^16}".format(ulist[i][0], ulist[i][1], ulist[i][2], chr(12288)))


def main():
url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html"
text = getHTMLText(url)
ulist = []
fillUnivList(ulist, text)
printUnivRank(ulist, 10)


main()

运行结果

排名                学校名称                 位置       
1                  清华大学                 北京       
2                  北京大学                 北京       
3                  浙江大学                 浙江       
4                 上海交通大学                上海       
5                  复旦大学                 上海       
6                中国科学技术大学               安徽       
7                 华中科技大学                湖北       
7                  南京大学                 江苏       
9                  中山大学                 广东       
10               哈尔滨工业大学               黑龙江       

这是个很典型的实例,python实验课也做了一次,但是比较匆忙直接摘抄网上的,现在再做一次顺便写个博客真是美滋滋。

文章作者: SNCKER
文章链接: https://sncker.github.io/blog/2019/07/26/Python网络爬虫-定向爬取中国大学排名/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SNCKER's blog