美文网首页
中国大学排名爬虫

中国大学排名爬虫

作者: Peng_001 | 来源:发表于2020-07-13 15:24 被阅读0次

    确定爬虫方案是否可行

    1)页面信息是否在HTML代码中。

    • 有一些页面内容是通过javascript 动态生成的。

    2)查看robot 约定。

    • 一般来说爬虫需要遵守相关的robot 协议。

    程序的结构设计

    1)获取网页内容。
    2)提取网页内容,并将信息储存在合适的数据结构中。
    3)利用数据结构,展示并输出信息。

    程序的结构化实现

    根据程序设计的三步结构,设计相关的函数。并最后封包在一个函数中输出。

    代码

    import requests
    from bs4 import BeautifulSoup
    import bs4
    
    def getHTMLText(url):
    # 通过request库获取页面信息
        try:
            hd = {'user-agent': 'Chrome/10'} # 修改头部信息
            r = requests.get(url, timeout = 30, headers = hd)
            r.raise_for_status()
            r.encoding = r.apparent_encoding
            return r.text
        except:
            return ''
    
    def fillUnivList(ulist, html):
    # 利用bs4 解析页面
        soup = BeautifulSoup(html, 'html.parser')
        for tr in soup.tbody.children:
            if isinstance(tr, bs4.element.Tag): # 筛选tbody 中的子节点 tr 的类型,需要为tag 类型
                tds = tr('td') # 将 tr 标签中的 td赋值给tds
                ulist.append([tds[0].string, tds[1].string, tds[4].string]) 
                # 分别对应td标签中的第1,2,5 列信息,并定义为str类型,添加到ulist中,并封包为一个表格。
    
    def printUnivList(ulist, num):
    # 将提取结果打印
        tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
        print(tplt.format('排名', '学校名称', '总分', chr(12288))) # 输出信息的第一行打印基本信息
        # 当中文宽度不够,系统默认采用西文空白填充
        # format 中输出内容分别为10,10,10 字号,居中。并将空格天空修改为中文类型
        for i in range(num):
            u = ulist[i]
            print(tplt.format(u[0], u[1], u[2], chr(12288)))
        print('Num: ' + str(num))
    
    def main():
        uinfo = []
        url = 'http://www.zuihaodaxue.com/zuihaodaxuepaiming2020.html'
        html = getHTMLText(url)
        fillUnivList(uinfo, html)
        printUnivList(uinfo, 20) # 限制输出的结果数目
    main()
    
    

    相关文章

      网友评论

          本文标题:中国大学排名爬虫

          本文链接:https://www.haomeiwen.com/subject/fsrpahtx.html