Python爬虫--2019大学排名数据抓取

Posted Lin-Grocery

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python爬虫--2019大学排名数据抓取相关的知识,希望对你有一定的参考价值。

Python爬虫--2019大学排名数据抓取

准备工作

  1. 输入:大学排名URL连接
  2. 输出:大学排名信息屏幕输出
  3. 所需要用到的库:requests,bs4

思路

  1. 获取网页信息
  2. 提取网页中的内容并放到数据结构中
  3. 利用数据结构展示并输出结果

程序设计

  1. 定义函数getHTMLText()获取网页信息
  2. 定义函数UnivList()放入数据结构
  3. 定义函数printUnivList()输出到屏幕

总体而言:

  • 写出需要自定义的函数,制作出总体的框架
  • 写出主函数框架,实现功能
  • 最后调用函数

步骤

查看url源代码

分析源代码,查看需要爬取的内容在什么位置
001.png

从图片中可以看出,排名信息是在<tbody>标签
具体的信息是在<tr>标签下的<td>标签内的string

定义函数getHTMLText

def getHMLText(url):
    \'\'\'
    获取url信息,输出url的内容,来抓取网页的信息
    \'\'\'
    try:
        r = request.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "抓取失败!"

定义函数UnivList()

def UnivList(ulist, html):
    \'\'\'
    提取html中的数据,放入到ulist列表,完成数据提取
    \'\'\'
    soup = BeautifulSoup(html, "html.parser")
    for tr in soup.find(\'tbody\').children:
        if isinstance(tr, bs4.element.Tag):  # 判断tr的子节点是否为非属性字符串
            tds = tr(\'td\')
            # print(tds)
            # print(\'#\' * 30)
            # print(tds[0], tds[0].string)
            # print(\'#\' * 30)
            # print(tds[1], tds[1].string)
            # print(\'#\' * 30)
            # print(tds[2], tds[2].string)
            # print(\'#\' * 30)
            # print(tds[3], tds[3].string)
            ulist.append([tds[0].string, tds[1].string, tds[3].string, tds[2].string])

定义函数printUnivList()

def printUnivList(ulist, num):
    \'\'\'
    将ulist列表信息打印,num表示打印前多少排名的学校
    \'\'\'
    print("{:^3}\\t{:^10}\\t{:^20}\\t{:^30}".format("排名", "学校名称", "总分", \'地址\'))
    for i in range(num):
        u = ulist[i]
        print("{:^3}\\t{:^10}\\t{:^20}\\t{:^30}".format(u[0], u[1], u[2], u[3]))

主函数main()

def main():
    \'\'\'
    实现整个代码
    \'\'\'
    ulist = []
    url = \'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html\'
    html = getHTMLText(url)
    UnivList(ulist, html)
    printUnivList(ulist, 100)

调用主函数

main()

完整代码

import requests
import bs4
from bs4 import BeautifulSoup
def getHMLText(url):
    \'\'\'
    获取url信息,输出url的内容,来抓取网页的信息
    \'\'\'
    try:
        r = request.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "抓取失败!"

def UnivList(ulist, html):
    \'\'\'
    提取html中的数据,放入到ulist列表,完成数据提取
    \'\'\'
    soup = BeautifulSoup(html, "html.parser")
    for tr in soup.find(\'tbody\').children:
        if isinstance(tr, bs4.element.Tag):  # 判断tr的子节点是否为非属性字符串
            tds = tr(\'td\')
            # print(tds)
            # print(\'#\' * 30)
            # print(tds[0], tds[0].string)
            # print(\'#\' * 30)
            # print(tds[1], tds[1].string)
            # print(\'#\' * 30)
            # print(tds[2], tds[2].string)
            # print(\'#\' * 30)
            # print(tds[3], tds[3].string)
            ulist.append([tds[0].string, tds[1].string, tds[3].string, tds[2].string])

def printUnivList(ulist, num):
    \'\'\'
    将ulist列表信息打印,num表示打印前多少排名的学校
    \'\'\'
    print("{:^3}\\t{:^10}\\t{:^20}\\t{:^30}".format("排名", "学校名称", "总分", \'地址\'))
    for i in range(num):
        u = ulist[i]
        print("{:^3}\\t{:^10}\\t{:^20}\\t{:^30}".format(u[0], u[1], u[2], u[3]))


def main():
    \'\'\'
    实现整个代码
    \'\'\'
    uinfo = []
    url = \'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html\'
    html = getHTMLText(url)
    fillUnivList(uinfo, html)
    printUnivList(uinfo, 100)

main()

以上是关于Python爬虫--2019大学排名数据抓取的主要内容,如果未能解决你的问题,请参考以下文章

python爬虫入门---第二篇:获取2019年中国大学排名

Python爬虫——定向爬取“中国大学排名网”

网络爬虫的提取爬虫实例

python爬虫爬取最好大学排名

中国大学排名定向爬虫

Python爬虫入门教程 30-100 高考派大学数据抓取 scrapy