Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 中文字幕在线播,精品91精品91精品国产片,亚洲精品综合久久

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          專為HTML解析設計的強大工具-Beautiful Soup

          我們先前進行網站頁面內容解析的過程中,通常選擇運用正則表達式來完成此任務。然而,正如前面幾篇文章所闡述和分析的那樣,無論是正則表達式還是XPath,它們雖各自具備適應不同應用場景的優勢,卻也都存在著各自難以避免的缺陷。例如,正則表達式具有相對復雜的語法結構并且需要大量的編程知識才能熟練掌握;而XPath雖然使得實現路徑查找更為簡潔易懂,但卻需要編寫復雜的節點路徑編碼。因此,為了充分利用HTML讀取技術的強大功能,同時追求更加簡明直觀的操作體驗,本文將向您推薦Beautiful Soup這款強大的三方工具。那么,它是否能夠如其名字那般“美麗”呢?接下來,讓我們共同揭開這個謎團!

          Beautiful Soup 也是一個 Python 的 XML 和 HTML 的解析庫,其提供了簡單的,Python 式的函數來處理導航,搜索,修改分析樹等功能(來自官方介紹)。

          Beautiful Soup來源于愛麗絲夢游仙境

          開始使用

          在使用 Beautiful Soup 之前,需要安裝好 lxml(推薦 lxml 解析器) 和其自身的庫。

          pip install beautifulsoup4
          pip install lxml

          beautiful Soup 在解析過程中依賴各種解析器,除了支持 Python 標準的解析器外,還支持其他的三方解析器(如: lxml)。

          各種解析器優缺點

          一般在使用的過程中,推薦使用 lxml,因為 lxml 本身也是一個非常優秀的解析庫,也支持 XML 的解析。

          假設有以下內容的 html 文檔。

          <!DOCTYPE html>
          <html lang="en">
          <body>
            <div>
              <ul>
                <li class="class-0">
                  <a href="a.html">
                    <span>第一個標簽</span>
                  </a>
                </li>
              </ul>
            </div>
          </body>
          </html>
          from bs4 import BeautifulSoup
          
          # 初始化BeautifulSoup,并指定lxml為解析器
          soup = BeautifulSoup(open("index.html"), 
                               "lxml")
          # 獲取span標簽
          print(soup.span)
          print(soup.span.string)
          
          # <span>第一個標簽</span>
          # 第一個標簽

          如上代碼,BeautifulSoup 方法有有兩個參數, 第一個參數接受一個 html 文檔,第二個參數指定解釋器類型,這樣就初始化了一個BeautifulSoup 的對象,后續就可以使用這個對象來解析和獲取 HTML 中的數據,如上方獲取 span, 并獲取 span 的內容。

          獲取 bs 對象有兩種方式,一種是直接使用文本字符,另一種是讀取文檔:

          from bs4 import BeautifulSoup
          
          soup = BeautifulSoup(open("index.html"))
          soup = BeautifulSoup("<html>data</html>")

          元素選擇

          通過上邊的代碼示例可以看到,在獲取到 bs 對象后,后續直接調用節點名稱就可以獲取到節點對象,再調用 string 屬性就可以獲取到節點的文本內容,相較于使用正則表達式或者 XPath 效率是非常高的。

          html_doc = """
          <html><head><title>The Dormouse's story</title></head>
          <body>
          <p class="title"><b>The Dormouse's story</b></p>
          
          <p class="story">Once upon a time there were three little sisters; and their names were
          <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
          <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
          <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
          and they lived at the bottom of a well.</p>
          
          <p class="story">...</p>
          """
          from bs4 import BeautifulSoup
          soup = BeautifulSoup(html_doc, 'html.parser')
          
          # 獲取title標簽
          soup.title
          # <title>The Dormouse's story</title>
          
          #獲取title標簽名字
          soup.title.name
          # u'title'
          
          #獲取title標簽文本內容
          soup.title.string
          # u'The Dormouse's story'
          
          #獲取title父標簽
          soup.title.parent.name
          # u'head'
          
          #獲取p標簽
          soup.p
          # <p class="title"><b>The Dormouse's story</b></p>
          
          #獲取p標簽的class屬性
          soup.p['class']
          # u'title'
          
          # 獲取a標簽
          soup.a
          # <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>
          
          # 查找所有的a標簽
          soup.find_all('a')
          # [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
          #  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
          #  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
          
          # 查找id為link3的標簽
          soup.find(id="link3")
          # <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>

          對象種類

          雖然在 Beautiful Soup 中可以將復雜的 HTML 文檔轉換為樹形結構,但是從大體可歸納為以下 4 個對象:

          Tag:Tag 對象用于表示 HTML 和 XML 文檔中的 tag 標簽。

          soup = BeautifulSoup('<b class="boldest">Extremely bold</b>')
          tag = soup.b
          type(tag)
          # <class 'bs4.element.Tag'>
          
          tag.name
          # u'b'
          
          tag['class']
          # u'boldest'

          如上任何的標簽在Beautiful Soup 都表示為一個 Tag 對象,且從該對象上獲取到當前標簽的各種屬性值。

          NavigableString :表示 Tag 中被包裹的字符串

          tag.string
          # u'Extremely bold'
          type(tag.string)
          # <class 'bs4.element.NavigableString'>

          BeautifulSoup :該對象表示文檔整體的一個類,即初始化后獲得的類,所以獲取到該類,就獲取到了整個文檔。需要注意需要和上邊 Tag 類做出區分,BeautifulSoup 類是特殊的 Tag 類。

          Comment :表示文檔中的注釋內容,其本質也是一個特殊的NavigableString 對象,但由于其特殊性,單獨做封裝處理。

          使用 CSS 選擇器選擇節點

          除了上邊的屬性選擇器和方法選擇器外,Beautiful Soup 還提供 CSS 選擇器,這對于有前端樣式開發經驗的同學來說是非常給力的一個特性。通過 CSS 選擇器也可以輕松的選定各個節點,但在使用中和上邊的有所不同需要調用 .selsect() 方法, 如下方代碼:

          soup.select("title")
          # [<title>The Dormouse's story</title>]
          
          soup.select("p:nth-of-type(3)")
          # [<p class="story">...</p>]

          有不熟悉css選擇器的小伙伴可以在w3c上學習,一般基礎的選擇器就可勝任絕大多數數據獲取的任務。

          天晚上竟然忙忘了,忘了給大家推文了。等到反應過來的時候,已經晚了,懶得不想寫了。最近確實很忙,各種事一堆,真的是希望自己能夠有個三頭六臂,踩著風火輪,效率高點就好了。

          今天給大家推薦一個不錯的小程序富文本解析器。

          我們都知道今年小程序不是一般的火,很多人都在做微信小程序,我也有一直在開發,最近正好用到了富文本解析的問題,所以,在 GitHub 上找到了一個不錯的開源庫。用起來,還挺順手,挺不錯的,所以非常值得推薦給大家。

          這個富文本解析器不僅支持解析轉換 HTML ,還支持 MarkDown 呢,它就是:wxParse - 微信小程序富文本解析組件。其作者用就是:將 Html/Markdown 轉換為微信小程序的可視化方案。

          特性如下:

          效果圖,也如下:

          真的非常不錯哦。使用方法很簡單,在這里我就不介紹了,大家直接去看項目中的介紹吧!里面用法介紹的很清楚,詳細。

          開源項目地址:https://github.com/icindy/wxParse

          開源項目作者:icindy

          今天的推薦不知道大家喜歡嗎?如果你喜歡,請在文章底部留言和點贊,以表示對我的支持,你們的留言和點贊是我持續更新的動力哦!

          章魚貓在此感謝大家的關注和支持。喜歡我,就趕緊關注我,給我點贊吧!

          互聯網+數據+人工智能時代,仍然有越來越多的網頁數據采集需求,且案例眾多,網頁數據采集在企業中落地的實際應用也在不斷地顯著增加。實際工作中可能需要為一個旅游網站獲取航班時間或Airbnb列表,或者可能需要收集數據,例如來自不同電子商務網站的價格表,以便進行價格比較。很多時候也會出于個人需要,比如為機器學習收集訓練和測試數據集等。這就是web網頁數據采集發揮作用的地方。

          在這里,我們將探討最好的網頁數據采集工具。

          1. Puppeteer

          https://github.com/puppeteer/puppeteer

          Puppeteer是Google放出的“終極”大招,它不只是一個網頁數據采集工具,實際上是一個Node庫,它提供了一個高階API,類似于Selenium Webdriver的高級別API,默認是通過DevTools協議控制無界面Chrome,還可以通過配置用于有界面Chrome。

          使用Puppeteer,我們可以做以下事情:

          # 用來生成網頁截圖或PDF文件。

          # 用來創建全新的自動化測試環境。

          # 用來捕捉網頁的時間線軌跡以診斷性能問題。

          # 抓取一個SPA(單頁應用程序)并生成網頁渲染之前的內容(服務器端渲染(SSR))。

          API像自然語言一樣簡潔明了,沒有callback,幾行代碼就能搞定我們所需的一切。

          2. Cheerio

          https://github.com/cheeriojs/cheerio

          Cheerio是一個標記解析庫,提供了對結果數據(比如服務端接口返回的數據)結構進行解析的API,Cheerio最好的一點是它不像web瀏覽器那樣解釋結果數據。然而,它既不產生視覺呈現、也不加載外部資源或請求CSS。如果實際項目中需要上面這些能力的話,就需要考慮類似PhantomJS這樣的項目。

          值得注意的是,用Node.js采集數據在Cheerio中要容易得多。

          比如采集http://v.163.com/special/opencourse/englishs1.html:

          3.Request - Promise

          https://github.com/request/request-promise

          Request-Promise是npm庫中的一個變體,它通過自動化的瀏覽器提供了一個更快的解決方案。當內容不是動態呈現時,可以使用此網頁數據采集工具。如果要處理的網站有一個認證系統,它可以是一個更先進的解決方案。如果我們把它和Puppeteer相比,它的用法正好相反。

          4. Nightmare

          https://github.com/segmentio/nightmare

          Nightmare是一個高級的瀏覽器自動化庫,它以瀏覽器的形式運行Electron程序。Electron (https://electronjs.org/)是一個使用 JavaScript, HTML 和 CSS 等 Web 技術創建原生程序的框架,兼容Mac、Windows和Linux,可以構建出三個平臺的桌面應用程序,它負責比較難搞的部分,我們只需把精力放在應用的核心上即可【Electron剛剛加入了 OpenJS 基金會】。Nightmare是一個濃縮的版本,或者我們可以說,是一個簡化版的Puppeteer。它有提供更多靈活性的插件,包括對文件下載的支持。

          Nightmare的目標是對外公開幾個使用起來像是同步的方法調用,比如goto、type和click,而不是深度嵌套的回調。最初是為在沒有api的站點之間自動化執行任務而設計的,但最常用于UI測試和數據采集。

          還可以運行mocha測試。

          5. Osmosis

          https://www.npmjs.com/package/osmosis

          Osmosis是一個HTML/XML解析器和網頁數據采集工具。它是用Node.js編寫的,用CSS3/xpath選擇器和輕量級HTTP包裝器打包。如果我們將它與Cheerio、jQuery和jsdom進行比較,則它沒有顯著的依賴性。

          實例代碼如下:


          【202001】


          主站蜘蛛池模板: 国产精品一区二区久久不卡| 中文字幕精品一区二区精品| 中文字幕不卡一区| 亚洲毛片αv无线播放一区| 日本一区二区三区免费高清| 国产福利电影一区二区三区,日韩伦理电影在线福 | 亚洲欧洲一区二区| 波多野结衣AV无码久久一区| 男人的天堂精品国产一区| 国模精品一区二区三区视频| 精品国产一区AV天美传媒| 中文字幕亚洲一区| 国产日韩精品一区二区在线观看 | 午夜无码一区二区三区在线观看 | 欲色aV无码一区二区人妻| 久久精品一区二区东京热| 国产精品亚洲不卡一区二区三区| 日本精品视频一区二区| 伊人久久精品一区二区三区| 无码一区二区三区在线| 免费播放一区二区三区| 精品人妻少妇一区二区三区| 国产精品免费视频一区| 国产大秀视频一区二区三区 | 亚洲一区在线免费观看| 久久精品一区二区免费看| 久久久无码精品国产一区| 国产激情з∠视频一区二区| 亚洲一区二区三区自拍公司| 精品亚洲一区二区| 射精专区一区二区朝鲜| 亚洲日韩一区二区三区| 日韩av片无码一区二区不卡电影| 乱码人妻一区二区三区| 日韩一区二区三区不卡视频| 一区二区三区视频免费| 一区二区三区无码被窝影院| 人成精品视频三区二区一区| 国产成人无码一区二区三区在线| 亚洲国产激情一区二区三区 | 糖心vlog精品一区二区三区|