Python实现中国大学排名的爬取

期末小作业1:

反思:
  1. 代码美观度差的太远
  2. 三天不写python就模糊了一些函数用法
  3. 目标定好,第一时间的思路是面向过程而不是面向对象
  4. 面向对象的写法掌握不熟练,需多加练习
import bs4
import requests
from bs4 import BeautifulSoup

class BestUniversity:
    # 步骤0:传入url,headers                       __init__()
    # 步骤1:从网络上获取大学排名网页内容             parse_url()
    # 步骤2:提取网页内容中信息到合适的数据结构        fillUnivList()
    # 步骤3:利用数据结构展示并输出结果               printUnivList()

    def __init__(self):
        '''
        初始化,传入url与headers
        :param self:
        :return:
        '''
        self.url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html"
        self.headers = {
            "User - Agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 80.0.3987.132Safari / 537.36"
        }
        self.time = 30
        self.uinfo = []
        self.html = self.parse_url()

    def parse_url(self):
        '''
        获取网站源码
        :param self:
        :return: decode()
        '''
        try:
            # print(self.url)
            response = requests.get(url=self.url, headers=self.headers, timeout=self.time)
            # print(response.content.decode())
            html = response.content.decode()
            # return response.content.decode()
            return html
        except:
            return ""

    def fillUnivList(self,html, ulist):
        # pass
        soup = BeautifulSoup(html, "html.parser")
        for tr in soup.find('tbody').children:
            if isinstance(tr, bs4.element.Tag):
                # pass
                tds = tr("td")
                ulist.append([tds[0].string, tds[1].string, tds[2].string])

    def printUnivList(self,ulist, num):
        # pass
        # fmat = "{0:^10}\t{1:{3}^10}\t{2:^10}"
        fmat = "{0:^10}\t{1:^6}\t{2:^10}"
        print(fmat.format("排名", "学校", "总分", chr(12888)))
        with open("BestUniversity.txt", "w", encoding="utf-8") as f:
            f.write(fmat.format("排名", "学校", "总分", chr(12888)))
        for i in range(num):
            u = ulist[i]
            print(fmat.format(u[0], u[1], u[2], chr(12888)))
            with open("BestUniversity.txt", "a", encoding="utf-8") as f:
                f.write('\n')
                f.write(fmat.format(u[0], u[1], u[2], chr(12888)))

    def run(self):
        # uinfo = []
        # html = self.parse_url()
        self.fillUnivList(self.html, self.uinfo)
        self.printUnivList(self.uinfo, 20)

if __name__ == '__main__':
    BU = BestUniversity()
    BU.run()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值