python日記Day21——網絡爬蟲之BeautifulSoup庫

python日記——網絡爬蟲之BeautifulSoup庫

  • BeautifulSoup庫入門
    1、基本使用:
    在這裏插入圖片描述
    2、BeautifulSoup庫的基本元素
    (1)Beautiful Soup庫是解析、遍歷、維護“標籤樹”的功能庫
    (2)Beautiful Soup庫的解析器:
    在這裏插入圖片描述
    (3)BeautifulSoup庫的基本元素:
    在這裏插入圖片描述
    1)任何存在於HTML語法中的標籤都可以用soup.tag訪問獲得,當HTML文檔中存在多個相同tag對應內容時,soup.tag返回第一個
    2)每個tag都有自己的名字,通過tag.name獲取,字符串類型
    3)一個tag可以有0或多個屬性,字典類型
    4)NavigableString可以跨越多個層次
    3、基於bs4庫的HTML內容遍歷方法
    (1)Html基本格式:
    在這裏插入圖片描述
    (2)標籤樹的遍歷方法:
    1)下行遍歷:
    在這裏插入圖片描述
    在這裏插入圖片描述
    2)上行遍歷:
    在這裏插入圖片描述
    3)平行遍歷:
    平行遍歷發生在同一個父節點下的各節點間
    在這裏插入圖片描述
    在這裏插入圖片描述
    4、基於bs4庫的HTML格式輸出
    (1)bs4庫的prettify()方法
    (2).prettify()爲HTML文本<>及其內容增加更加’\n’
    在這裏插入圖片描述
    (3).prettify()可用於標籤,方法:tag.prettify()
    在這裏插入圖片描述
    (4)bs4庫將任何HTML輸入都變成utf‐8編碼,Python 3.x默認支持編碼是utf‐8,解析無障礙
    在這裏插入圖片描述
  • 信息標記與提取方法
    1、信息標記的三種形式:
    (1)XML:
    在這裏插入圖片描述
    在這裏插入圖片描述
    (2)JSON:
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    (3)YAML:
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    2、三種形式的比較:
    XML:最早的通用信息標記語言,可擴展性好,但繁瑣,Internet上的信息交互與傳遞
    JSON:信息有類型,適合程序處理(js),較XML簡潔,移動應用雲端和節點的信息通信,無註釋
    YAML:信息無類型,文本信息比例最高,可讀性好,各類系統的配置文件,有註釋易讀
    3、基於bs4的HTML內容查找方法
    (1)<>.find_all(name, attrs, recursive, string, **kwargs),返回一個列表類型,存儲查找的結果
    tag(…) 等價於 tag.find_all(…)
    soup(…) 等價於 soup.find_all(…)

    (2)參數詳解:
    ∙ name : 對標籤名稱的檢索字符串
    ∙ attrs: 對標籤屬性值的檢索字符串,可標註屬性檢索
    ∙ recursive: 是否對子孫全部檢索,默認True
    ∙ string: <>…</>中字符串區域的檢索字符串
    (3)擴展方法:
    在這裏插入圖片描述
  • 中國大學排名實例
#getHtml():通過requests庫獲取大學排名網頁內容
#fillList():提取網頁內容中信息到合適的數據結構
#printList():輸出排名、大學名稱、總分
#saveToExcel():將結果保存到excel
import requests as rq
from bs4 import BeautifulSoup
import pandas as pd
import bs4
def getHtml(url):
    try:
        r = rq.get(url,timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""
def fillList(ulist,html):
    soup = BeautifulSoup(html,'html.parser')
    for tr in soup.find('tbody').children:
        if isinstance(tr,bs4.element.Tag):
        #判斷tr是否是tag類型,防止遍歷到string
            tds = tr('td')
            #等同於tds = tr.find_all('td')
            ulist.append([tds[0].string,tds[1].string,tds[3].string])            
def printList(ulist,num):
    tplt = "{0:^10}\t{1:{3}^10}\t{2:^8}"
    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)
def saveToExcel(ulist):
     df = pd.DataFrame(ulist,columns=['排名','學校名稱','總分'])
     df.to_excel('C:/Temp/school.xlsx')
     print("保存成功")
def main():
    uinfo = [] #用於存放內容
    url = "http://www.zuihaodaxue.com/Greater_China_Ranking2019_0.html"
    html = getHtml(url)
    fillList(uinfo,html)
    printList(uinfo,20)  
    saveToExcel(uinfo)
main()

在這裏插入圖片描述

本文部分內容參考於北京理工大學嵩天老師相關課程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章