中国大学排名python爬虫_Python爬虫之爬取中国大学排名(BeautifulSoup库)

本文介绍了一种使用Python的requests和BeautifulSoup库抓取并解析中国大学排名的方法。通过分析HTML源码,提取tbody标签内的tr元素,进而获取每个大学的排名、名称和总分信息。程序包括获取HTML文本、填充大学信息列表和打印列表等步骤。
摘要由CSDN通过智能技术生成

image.png

我们需要打开网页源代码,查看此网页的信息是写在html代码中,还是由js文件动态生成的,如果是后者,那么我们目前仅仅采用requests和BeautifulSoup还很难爬取到排名的信息。

查看网页源代码,我们可以发现,排名信息是写在html页面中的,这时候我们利用BeautifulSoup库就可以对信息进行提取

image.png

爬虫实现的目标:

输入:大学排名URL链接

输出:大学排名信息的屏幕输出(排名,大学名称,总分)

技术路线:requests‐bs4

定向爬虫:仅对输入URL进行爬取,不扩展爬取

分析

首先,我们要获取到这个网页的源码,我们可以利用requests库抓取到该网页的源码信息。然后利用bs4库将网页中大学排名的信息提取出来,输入到数据结构中,最后将数据结构中存储的数据输出

主要就是一下三步:

步骤1:从网络上获取大学排名网页内容

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

步骤3:利用数据结构展示并输出结果

程序设计

getHTMLText()

fillUnivList()

printUnivList()

首先我们先忽略代码的具体实现,写出爬取的逻辑:

#CrawUnivRankingB.py

import requests

from bs4 import BeautifulSoup

import bs4

def getHTMLText(url):

def fillUnivList(ulist, html):

def printUnivList(ulist, num):

def main():

uinfo = []

url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2017.html'

html = getHTMLText(url)

fillUnivList(uinfo, html)

printUnivList(uinfo, 20) # 20 univs

main()

然后我们来实现每个函数

首先第一个函数很好实现,就是requests库直接抓取网页

def getHTMLText(url):

try:

r = requests.get(url, timeout=30)

r.raise_for_status()

r.encoding = r.apparent_encoding

return r.text

except:

return ""

然后对于信息的提取,我们就需要对网页进行仔细的分析

image.png

将源码格式化后就是如下这样:

image.png

我们发现所有的排名信息都在一个tbody的标签里面,然后每个tr标签又存储了每个大学的信息,具体的信息存在每个td标签里。

所以,思路救出来了

第一步,提取出tbody标签,也就是页面中第一个tbodybiaoqian

第二步,提取出里面所有的tr标签

第三步,对每个tr标签里的td信息存储到相应的数据结构里

#CrawUnivRankingB.py

import requests

from bs4 import BeautifulSoup

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 = BeautifulSoup(html, "html.parser")

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

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

tds = tr('td')

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

def printUnivList(ulist, num):

tplt = "{0:^10}\t{1:{3}^10}\t{2:^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.cn/zuihaodaxuepaiming2016.html'

html = getHTMLText(url)

fillUnivList(uinfo, html)

printUnivList(uinfo, 20) # 20 univs

main()

image.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值