python中国大学排名爬虫写明详细步骤-Python爬虫——定向爬取“中国大学排名网”...

本文整理自相关课程实战章节,介绍用Python进行大学排名定向爬虫。先确定从网络获取排名内容、提取信息到合适数据结构、展示输出结果的思路,给出对应代码。还指出输出格式问题,通过设置format()填充方式为中文字符空格填充优化输出,使结果对齐。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内容整理自中国大学MOOC——北京理工大学-蒿天-Python网络爬虫与信息提取 相关实战章节

我们预爬取的url如下

网页节选

1571555-20200211113926506-2052127768.png

在浏览器中读取网页源代码

1571555-20200211114414325-342500134.png

可以 发现表格数据信息是直接写入HTML页面信息中,所以我们可以直接采取定向爬虫操作。

我们的整体设计思路如下:

1.从网络上获取大学排名网络内容

2.提取网页内容中信息到合适的数据结构

3.利用数据结构展示并输出结果

仔细观察可以发现,HTML的结构中,每个

标记

所有

根据设计思路几网页结构信息,代码如下

1 importrequests2 from bs4 importBeautifulSoup3 importbs44

5 def getHTMLText(url): #获取url信息

6 try:7 r = requests.get(url,timeout = 30)8 r.raise_for_status()9 r.encoding =r.apparent_encoding10 returnr.text11 except:12 return ""

13

14 def fillUnivList(ulist,html): #将一个html页面放入一个列表

15 soup = BeautifulSoup(html,"html.parser")16 #每个

17 #所有

18 for tr in soup.find('tbody').children:19 if isinstance(tr,bs4.element.Tag): #过滤掉非标签信息,以取出包含在

20 tds = tr('td') #等价于tr.find_all('td'),在tr标签中找td标签内容

21 #print(tds)

22 ulist.append([tds[0].string,tds[1].string,tds[3].string,tds[2].string])23 #td[0],[1],[3],[2],分别对应每组td信息中的排名,学校名称,得分,区域。将这些信息从摘取出来

24

25

26 def printUnivList(ulist,num): #将列表信息输出

27 print("{:^10} {:^6} {:^10} {:^10}".format("排名","大学名称","得分","省市"))28 for i inrange(num):29 u =ulist[i]30 print("{:^10} {:^6} {:^10} {:^10}".format(u[0],u[1],u[2],u[3]))31

32 if __name__ == '__main__':33 uinfo =[]34 url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html"

35 html =getHTMLText(url)36 fillUnivList(uinfo,html)37 printUnivList(uinfo,20) #暂时只看前20所学校

输出信息如下

1571555-20200212111358304-893352601.png

其中第27行处,{:^10}为Python的格式化输出,30表示输出宽度约束为30个字符,^表示输出时右对齐,若宽度小于字符串的实际宽度,以实际宽度输出

为了使输出结果更整齐,我们可以对于输出部分进行优化

我们在输出时用到了format()方法,这样就会产生一个问题:当中文字符宽度不够时,方法会默认采用西文字符填充。而中西文字符宽度并不相同,这就是导致每行字符无法一一对齐的原因。

这里我们就可以设置format()填充方式为,采用中文字符的空格填充,即chr(12288)

于是我们对printUnivList()方法做如下修改

def printUnivList(ulist,num): #将列表信息输出

tplt = "{0:^10} {1:{4}^10} {2:^10} {3:^10}" #{4}表示需要用到format方法中,从0伊始定义的第[4]个变量

print(tplt.format("排名","大学名称","得分","省市",chr(12288)))for i inrange(num):

u=ulist[i]print(tplt.format(u[0],u[1],u[2],u[3],chr(12288)))

输出结果如下

1571555-20200212113234220-980010328.png

这样就对齐了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值