前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python案例-爬取大学排名

python案例-爬取大学排名

作者头像
企鹅号小编
发布2018-01-12 10:40:48
9790
发布2018-01-12 10:40:48
举报
文章被收录于专栏:企鹅号快讯企鹅号快讯

一个好玩的爬虫

明天就要考试了,就是不想复习,就想去写代码,学习编程!2018,第一炮。

技术路线:request-bs4

程序结构:

1.从网上获取大学排名 :getHTMLText()

2.提取网页内容到合适的数据结构中:fillUnivList()

3.利用合适的数据结构展示爬取的结果 :printUnivList()

源程序代码:

import requests #导入request库

import bs4 #导入bs4库,包括BeautifulSoup

#输入爬取的网址,输出爬取的内容

def getHTMLText(url):

try:

r=requests.get(url,timeout=30) #爬取的网址以及,反应时间

r.raise_for_status() #判断爬取是否异常

r.encoding=r.apparent_encoding #更改编码

return r.text #返回读取的内容

#异常的处理

except:

return ""

#将页面放到一个list列表中,

def fillUnivList(ulist,html):

#使用beautifulSoup对爬取的内容进行html解码

soup=BeautifulSoup(html,"html.parser")

#遍历tbody标签的孩子的tr标签

for tr in soup.find('tbody').children:

#对获取的tr标签进行判断是不是标签

if isinstance(tr,bs4.element.Tag):

tds=tr('td') #获取td标签,列表类型

#向定义的列表增加信息

ulist.append([tds[0].string,tds[1].string,tds[3].string])

#学校信息的打印,需要格式化输出

def printUnivList(ulist,num):

#表示填充时使用第三个变量,中文空格 chr(12288)

tplt="\t^10}\t"

#首先打印表头,居中对齐10个字符

print(tplt.format("排名","学校名称","总分",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/zuihaodaxuepaiming2016.html' #大学排名的链接

html=getHTMLText(url) #调用函数,爬取网页

fillUnivList(uinfo,html) #将爬取的网页放到uinfo中

printUnivList(uinfo,20) #打印前20个大学排名信息

#程序入口

main()

网页结果

01

爬取显示结果

2

这里爬取的网页是静态文字内容,不适用JavaScript动态生成的,2017年的大学排名在本程序就不可以使用。这里还需要注意的是对于字符串的格式化输出,使用chr(12288),代表的是一个中文的空格键。作者小白,请多多指导!

本文来自企鹅号 - IT佬的成长之路媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - IT佬的成长之路媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档