首頁  >  文章  >  web前端  >  使用Beautiful Soup解析dom的方法

使用Beautiful Soup解析dom的方法

一个新手
一个新手原創
2017-09-20 09:34:532469瀏覽


使用Beautiful Soup解析dom

本文主要介紹如何使用Beautiful Soup解析dom。

Beautiful Soup的簡介

Beautiful Soup提供一些簡單的、python式的函數用來處理導航、搜尋、修改分析樹等功能。它是一個工具箱,透過解析文件為使用者提供需要抓取的數據,因為簡單,所以不需要多少程式碼就可以寫出一個完整的應用程式。
 Beautiful Soup自動將輸入文件轉換為Unicode編碼,輸出文件轉換為utf-8編碼。你不需要考慮編碼方式,除非文件沒有指定一個編碼方式,這時,Beautiful Soup就不能自動辨識編碼方式了。然後,你只需要說明一下原始編碼方式就可以了。
 Beautiful Soup已成為和lxml、html6lib一樣出色的python解釋器,為使用者靈活地提供不同的解析策略或強勁的速度。

Beautiful Soup 安裝

部落客使用的是mac,這裡面只介紹在mac下Beautiful Soup的安裝方法。 python 第三方函式庫安裝都很簡單,樓主一直都使用pip來安裝。

安裝pip

easy_install pip

安裝Beautiful Soup

pip install beautifulsoup4

有時候我們使用pip install beautifulsoup4 指令來安裝會報錯,這時候我們需要在指令前加上sudo來取得權限。

sudo pip install beautifulsoup4

到目前為止我們的準備工作就做好了,現在我們可以開始使用Beautiful Soup。本文只使用到了bs4(備註:文章中bs4=beautifulsoup4)部分方法,想要進一步了解bs​​4的可以查看bs4官方文檔,樓主的項目建的很簡單index.py和一個html文件夾,裡面放有一些. html靜態檔案

index.py檔

# coding=utf-8import osfrom bs4 import BeautifulSoupimport sys 

#定义一个list来存放文件路径paths=[]#获取所有的文件路径def get_paths():
    for fpathe,dirs,fs in os.walk('html'):        
    for f in fs:            
    #print os.path.join(fpathe,f)
            #将拼接好的path存放到list中
            filepath=os.path.join(fpathe,f)            
            #只放入.html后缀文件路径
            if(os.path.splitext(f)[1]==".html"):
                paths.append(filepath)#读取html文件修改后并写入相应的文件中去def reset_file(path):
    #判断文件是否存在
    if not os.path.isfile(path):        
    raise TypeError(path + " does not exist")    
    #读取文件,bs4自动将输入文档转换为Unicode编码,
    #输出文档转换为utf-8编码,bs4也可以直接读取html
    #字符串,例如BeautifulSoup(&#39;<p>content</p>&#39;)
    soup=BeautifulSoup(open(path))    
    #select是bs4提供的方法,和jquery的$选择器一样
    #方便。可以标签(eg:p,title,p...)来查找,也
    #也可以通过css的 class .和id #来查找,基本上和我们
    #使用$一样。

    #选取id="nav"节点下的所有li元素里面的a标签,返回值是一个list集合
    nav_a=soup.select("#nav li a")    
    #修改a的href属性
    if(len(nav_a)>1):
        nav_a[0]["href"]="/m/"
        nav_a[1]["href"]="/m/about_mobile/m_about.html"

    #选取class="footer"里的所有a标签
    footer_a=soup.select(".footer a")    
    if(len(footer_a)>0):
        footer_a[1]["href"]="/m/about_mobile/m_sjdt.html"

    content_p=soup.select(".content p")    
    #修改<p>我是string</p>里面的文本内容
    if(len(content_p)>0):
        content_p[0].string="修改p标签里面的测试内容"

    #修改系统的默认编码
    reload(sys)                    
    sys.setdefaultencoding(&#39;utf-8&#39;) 

    #打开相应的文件写入模式,打开文件不要放入try里面,否则会
    #出现异常
    f=open(path,"w")    try:        
    #写入文件
        f.write(soup.prettify())    finally:        
    #关闭文件
        file.close()#定义main函数程序的入口    
        if __name__=="__main__":
    get_paths()    
    #遍历所有文件路径
    for p in paths:
        reset_file(p)

以上是使用Beautiful Soup解析dom的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn