爬虫:example one -- 爬取大学排名

摘要

爬取的目标网页是最好大学网
这里使用BeautifulSoup + requests模块实现。

说明

基本步骤如下:

  1. 通过requests获取网站内容
  2. 通过BeautifulSoup查找到需要的元素
  3. 格式化输出结果

代码实现

    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[2].string])
    
    def printUnivList(uList, num):
        '输出结果列表'
        tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
        print(tplt.format("排名", "学校名称", "总分", chr(12288))) # chr(12288) 中文填充空格
        for i in range(num):
            u = uList[i]
            print(tplt.format(u[0], u[1], u[2], chr(12288)))
        print("Suc" + str(num))
    
    def main():
        uinfo = []
        url = "http://www.zuihaodaxue.com/shengyuanzhiliangpaiming2018.html"
        html = getHTMLText(url)
        fillUnivList(uinfo, html)
        printUnivList(uinfo, 20)    # 20 univs
    
    if __name__ == "__main__":
        main()

上面代码中,chr(12288)是表明空格使用中文空格来填充,代码格式化输出前20个学校的信息。
代码重点在于fillUnivList函数,也就是使用BeautifulSoup来定位元素的方法。

你可能感兴趣的:(爬虫:example one -- 爬取大学排名)