爬虫小实例——定向爬取及优化输出格式

定向爬取的URL:http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html

import requests
from bs4 import BeautifulSoup
import bs4


# 获得爬取的内容 
def get_html_text(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        # 设置文本编码,如果是ISO-8859-1,中文会乱码
        if r.encoding == "ISO-8859-1":
            r.encoding = r.apparent_encoding
        return r.text
    except:
        pass
    return ""


# 填充大学列表 
def fill_univ_list(ulist, html):
    soup = BeautifulSoup(html, 'html.parser')
    # 根据分析爬到的页面,我们要的内容在tbody的tr标签的td标签中
    # 遍历tr标签
    for tr in soup.find('tbody').children:
        # 使用isinstance要import bs4
        # 检查遍历到的tr元素是不是标签,因为它有可能是个字符串,这不是我们想要的
        if isinstance(tr, bs4.element.Tag):
            # 是tr标签,就取出它的td列表
            tds = tr('td')
            # 获取td标签的内容
            ulist.append([tds[0].string, tds[1].string, tds[2].string])

    pass


# 打印前num名的大学
def print_univ_list(ulist, num):
    # {3}表示使用chr(12288)中文空格来填充
    tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
    # chr(12288)表示在不够位时填充中文空格,不设置的话,默认填充西文空格
    print(tplt.format("排名", "学校", "总分", chr(12288)))
    for i in range(num):
        u = ulist[i]
        print(tplt.format(u[0], u[1], u[2], chr(12288)))


# 主函数,定义整个架构
def main():
    uinfo = []
    url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html'
    html = get_html_text(url)
    fill_univ_list(uinfo, html)
    # 打印前20所大学
    print_univ_list(uinfo, 20)


if __name__ == "__main__":
    main()

很有意思的,快来学习吧!

你可能感兴趣的:(Python,定向爬取)