爬取2019世界大学排名

爬取2019世界大学排名

  • 网页分析
  • 完整源码
  • 程序结果展示
  • 学习的网址

  刚刚入门学爬虫,学习mooc上嵩天老师的爬取大学排名,练习了一下爬取最好大学网

网页分析

爬取2019世界大学排名_第1张图片
源码如上图所示
  从上面源码可以看出每一个大学的信息都是用tr标签的保存的其中排名为奇数的大学class=alt,排名为偶数的大学为class = alt2,可以考虑使用beautifulsoup库的正则表达式用法把它们都提取出来。

trL = soup.find_all("tr",class_=re.compile(r"alt.*"))

  又因为tr标签内的前5个标签是排名,学校,国家图片,地区排名,总分。
  为了获取国家缩写使用字符串的切片把国家名字切出来。后面6个标签是相关的分数。它们结构都比较整齐,用列表把他们都存下来。

world_rank = m[0].get_text()
name = m[1].get_text()
country = m[2].img.get("src")
country = country.split('/')[-1].split('.')[0]
place_rank = m[3].get_text()
total_score = m[4].get_text()
for i in range(6):
    #index =m[5+i].get("class")[-1]
    scoreL.append(m[5+i].get_text())

  最后通过循环把前1000名的学校都爬取下来,并用pandas保存

完整源码

# -*- coding: utf-8 -*-
#爬取世界大学排名
import requests as rq
from bs4 import BeautifulSoup
import re
import pandas as pd


def getHTMLText(url):
    try:
        html = rq.get(url,timeout=30)
        html.raise_for_status()
        html.encoding = html.apparent_encoding
        return html.text
    except:
        return " "
    
def getun(num,data,trL):
    scoreL =[]
    m = list(trL[num].children)
    world_rank = m[0].get_text()
    name = m[1].get_text()
    country = m[2].img.get("src")
    country = country.split('/')[-1].split('.')[0]
    place_rank = m[3].get_text()
    total_score = m[4].get_text()
    for i in range(6):
        #index =m[5+i].get("class")[-1]
        scoreL.append(m[5+i].get_text())
    data.append([world_rank,name,country,place_rank,total_score,scoreL])
    #print([world_rank,name,country,place_rank,total_score,scoreL])
    
    
def getdata(html,data):
    soup = BeautifulSoup(html,"html.parser")
    trL = soup.find_all("tr",class_=re.compile(r"alt.*"))
    for num in range(len(trL)):
        getun(num,data,trL)
    return data
    
    
if __name__=="__main__":
    url = "http://www.zuihaodaxue.com/ARWU2019.html"
    data = [["排名",'学校','国家','地区排名','总分','[alumi,award,hici,ns,pub,pcp]']]
    html = getHTMLText(url)
    getdata(html,data)
    df = pd.DataFrame(data)
    df.to_excel('世界大学排名.xlsx',header=False,index=False)
    print("世界大学排名爬取完成")

程序结果展示

爬取2019世界大学排名_第2张图片

学习的网址

Python网络爬虫与信息提取;
BeautifulSoup中文官网

你可能感兴趣的:(爬取2019世界大学排名)