最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)解析Html的方法與對比

 更新時間:2024年03月22日 15:51:42   作者:microhex  
在最近需要的需求中,需要?python?獲取網(wǎng)頁內(nèi)容,并從html中獲取到想要的內(nèi)容,本文主要介紹了兩種常用方法并進行了對比,感興趣的可以了解下

在最近需要的需求中,需要 python 獲取網(wǎng)頁內(nèi)容,并從html中獲取到想要的內(nèi)容。這里記錄一下兩個比較常用的python庫對html的解析。

1. BeautifulSoup

它是一個非常流行的python腳本庫,用于解析HTML和XML文檔。如果你對 java 很熟悉,那么就會容易想到java中也存在一個類似的java庫,叫Jsoup,名稱相似,效果也差不多。BeautifulSoup提供了簡單易用的API,可以通過標簽名、屬性、CSS選擇器等各種方式查找和提取HTML元素.

安裝

pip install beautifulsoup4

實例代碼:

from bs4 import BeautifulSoup
import requests

# 發(fā)送請求獲取到 html 內(nèi)容
response = requests.get("https://www.example.com")
html_content = response.text 

# 創(chuàng)建 BeautifulSoup 對象
soup = BeautifulSoup(html,'html.parser')

# 創(chuàng)建 CSS 選擇器查找元素
elements = soup.select(".class-name")
for element in elements:
  print(element.text)

比如我現(xiàn)在想獲取新浪新聞的列表:

對 html 進行分析,我們可以發(fā)現(xiàn) class name:

那么我們可以直接填入代碼:

def try_to_get_world_news() :
    response = requests.get("https://news.sina.com.cn/world/")
    response.encoding = "utf-8"
    html_data = response.text
    # 創(chuàng)建 BeautifulSoup 對象
    soup = BeautifulSoup(html_data, "html.parser")
    # 通過css選擇器cha查找元素
    elements =  soup.select(".news-item")
    for element in elements:
        if element is not None:
           a_links = element.find_all('a')
           if a_links is not None and len(a_links) > 0 :
              a_link = a_links[0]
              a_text = a_link.text.strip()
              a_href = a_link.get('href')
              print("文本:" + a_text + ",鏈接:" + a_href)

2. lxml

另外一個強大的python庫,也是用來處理 HTML 和 XML 文檔。當然,它提供了XPath和CSS選擇器等功能,也可以很方面的定位和提取HTML庫。

安裝

pip install lxml

?當然你還可能需要安裝一下 cssselect 這個庫

pip install cssselect

代碼實例

from lxml import html
import requests
import cssselect

# 創(chuàng)建請求對象,獲取請求內(nèi)容
response = requests.get("https://www.example.com")
html_content = response.text

# 創(chuàng)建 lxml 的 HTML 對象
tree = html.fromstring(html_content)

# 通過 css 選擇器查找
elements = tree.cssselect(".class-name")
for element in elements:
  print(element.text)

demo:

同樣也是上面的例子,直接貼代碼:

    response = requests.get("https://news.sina.com.cn/world/")
    response.encoding = "utf-8"
    html_data = response.text
    tree = html.fromstring(html_data)
    elements =  tree.cssselect(".news-item")
    for element in elements:
        print(element)

直接看結(jié)果

3. BeautifulSoup 和 lxml 優(yōu)缺點

BeautifulSoup和lxml都是Python中廣泛使用的HTML和XML解析庫,它們各自有其優(yōu)勢和特點。以下是BeautifulSoup和lxml的主要區(qū)別和優(yōu)勢:

BeautifulSoup的優(yōu)勢:

  • 簡單易用:BeautifulSoup提供了一個簡單而直觀的API,使得解析HTML和XML文檔變得非常容易。它的語法簡潔明了,即使是初學者也可以快速上手。
  • 強大的解析能力:BeautifulSoup可以處理不規(guī)范的HTML和XML文檔,即使文檔中存在錯誤或不完整的標簽,它仍然能夠正確解析。
  • 支持多種解析器:BeautifulSoup支持多種底層解析器,如lxml、html.parser和html5lib等。你可以根據(jù)需要選擇合適的解析器來提高解析性能或處理特定的文檔。
  • 靈活的導航和搜索:BeautifulSoup提供了多種方法來導航和搜索文檔樹,如通過標簽名、屬性、CSS選擇器等。它還支持使用正則表達式進行搜索和匹配。
  • 對Python開發(fā)者友好:BeautifulSoup是一個純Python庫,它與Python的數(shù)據(jù)結(jié)構(gòu)和編程風格緊密集成。對于Python開發(fā)者來說,使用BeautifulSoup更加自然和便捷。

lxml的優(yōu)勢:

  • 高性能:lxml是一個高性能的HTML和XML解析庫,它使用C語言編寫的libxml2和libxslt庫作為底層引擎,因此解析速度非???。
  • 支持XPath:lxml內(nèi)置了對XPath的支持,XPath是一種強大的語言,用于在XML和HTML文檔中進行導航和查詢。使用XPath可以方便地定位和提取所需的元素。
  • 支持CSS選擇器:lxml同樣支持使用CSS選擇器來查找和提取元素,這對于Web開發(fā)者來說非常熟悉和便捷。
  • 支持XML和HTML的轉(zhuǎn)換:lxml可以將HTML文檔轉(zhuǎn)換為well-formed的XML文檔,也可以將XML文檔轉(zhuǎn)換為HTML文檔,這在某些情況下非常有用。
  • 與其他庫的集成:lxml可以與其他Python庫很好地集成,如pandas、NumPy等,可以方便地進行數(shù)據(jù)處理和分析。

區(qū)別:

解析速度:lxml的解析速度通常比BeautifulSoup更快,特別是在處理大型文檔時。如果性能是主要考慮因素,lxml可能是更好的選擇;

易用性:BeautifulSoup的API更加簡單和直觀,對于初學者來說更容易上手。而lxml的API相對更加底層和復雜,需要一定的學習成本。

文檔支持:BeautifulSoup對于處理不規(guī)范的HTML文檔更加寬容,而lxml更傾向于處理well-formed的XML文檔。

依賴項:BeautifulSoup是一個純Python庫,沒有外部依賴。而lxml依賴于C語言編寫的libxml2和libxslt庫,需要單獨安裝。

當然,我們的選擇就是看自己的需求和偏好了。如果你是性能要求高,追求XPath和其它庫的繼承,lxml將會是一個比較好的選擇;當然,就像我,比較重視簡單易用,而且面對的HTML并不是特別的規(guī)范,我就會選擇 BeautifulSoup。

以上就是Python實現(xiàn)解析Html的方法與對比的詳細內(nèi)容,更多關于Python解析Html的資料請關注腳本之家其它相關文章!

相關文章

最新評論

肥城市| 乐亭县| 涞源县| 满洲里市| 赤水市| 青龙| 应城市| 河池市| 会理县| 织金县| 阿合奇县| 通辽市| 讷河市| 垣曲县| 军事| 贡觉县| 广河县| 洱源县| 金乡县| 饶平县| 罗山县| 万荣县| 镇雄县| 湘潭县| 闻喜县| 永川市| 左权县| 翁源县| 阿坝| 开封县| 中西区| 宜兰县| 文山县| 永和县| 宁明县| 密云县| 美姑县| 宝坻区| 崇明县| 桐梓县| 略阳县|