欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python爬蟲beautifulsoup4常用的解析方法總結(jié)

 更新時(shí)間:2019年02月25日 10:39:41   作者:Lee_Tech  
今天小編就為大家分享一篇關(guān)于Python爬蟲beautifulsoup4常用的解析方法總結(jié),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

摘要

  • 如何用beautifulsoup4解析各種情況的網(wǎng)頁

beautifulsoup4的使用

關(guān)于beautifulsoup4,官網(wǎng)已經(jīng)講的很詳細(xì)了,我這里就把一些常用的解析方法做個(gè)總結(jié),方便查閱。

裝載html文檔

使用beautifulsoup的第一步是把html文檔裝載到beautifulsoup中,使其形成一個(gè)beautifulsoup對(duì)象。

import requests
from bs4 import BeautifulSoup
url = "http://new.qq.com/omn/20180705/20180705A0920X.html"
r = requests.get(url)
htmls = r.text
#print(htmls)
soup = BeautifulSoup(htmls, 'html.parser')

初始化BeautifulSoup類時(shí),需要加入兩個(gè)參數(shù),第一個(gè)參數(shù)即是我們爬到html源碼,第二個(gè)參數(shù)是html解析器,常用的有三個(gè)解析器,分別是”html.parser”,”lxml”,”html5lib”,官網(wǎng)推薦用lxml,因?yàn)樾矢撸?dāng)然需要pip install lxml一下。

當(dāng)然這三種解析方式在某些情況解析得到的對(duì)象內(nèi)容是不同的,比如對(duì)于標(biāo)簽不完整這一情況(p標(biāo)簽只有一半):

soup = BeautifulSoup("<a></p>", "html.parser")
# 只有起始標(biāo)簽的會(huì)自動(dòng)補(bǔ)全,只有結(jié)束標(biāo)簽的灰自動(dòng)忽略
# 結(jié)果為:<a></a>
soup = BeautifulSoup("<a></p>", "lxml")
#結(jié)果為:<html><body><a></a></body></html>
soup = BeautifulSoup("<a></p>", "html5lib")
# html5lib則出現(xiàn)一般的標(biāo)簽都會(huì)自動(dòng)補(bǔ)全
# 結(jié)果為:<html><head></head><body><a><p></p></a></body></html>

使用

在使用中,我盡量按照我使用的頻率介紹,畢竟為了查閱~

  • 按照標(biāo)簽名稱、id、class等信息獲取某個(gè)標(biāo)簽
html = '<p class="title" id="p1"><b>The Dormouses story</b></p>'
soup = BeautifulSoup(html, 'lxml')
#根據(jù)class的名稱獲取p標(biāo)簽內(nèi)的所有內(nèi)容
soup.find(class_="title")
#或者
soup.find("p",class_="title" id = "p1")
#獲取class為title的p標(biāo)簽的文本內(nèi)容"The Dormouse's story"
soup.find(class_="title").get_text()
#獲取文本內(nèi)容時(shí)可以指定不同標(biāo)簽之間的分隔符,也可以選擇是否去掉前后的空白。
soup = BeautifulSoup('<p class="title" id="p1"><b> The Dormouses story </b></p><p class="title" id="p1"><b>The Dormouses story</b></p>', "html5lib")
soup.find(class_="title").get_text("|", strip=True)
#結(jié)果為:The Dormouses story|The Dormouses story
#獲取class為title的p標(biāo)簽的id
soup.find(class_="title").get("id")
#對(duì)class名稱正則:
soup.find_all(class_=re.compile("tit"))
#recursive參數(shù),recursive=False時(shí),只find當(dāng)前標(biāo)簽的第一級(jí)子標(biāo)簽的數(shù)據(jù)
soup = BeautifulSoup('<html><head><title>abc','lxml')
soup.html.find_all("title", recursive=False)
  • 按照標(biāo)簽名稱、id、class等信息獲取多個(gè)標(biāo)簽
soup = BeautifulSoup('<p class="title" id="p1"><b> The like story </b></p><p class="title" id="p1"><b>The Dormouses story</b></p>', "html5lib")
#獲取所有class為title的標(biāo)簽
for i in soup.find_all(class_="title"):
  print(i.get_text())
#獲取特定數(shù)量的class為title的標(biāo)簽
for i in soup.find_all(class_="title",limit = 2):
  print(i.get_text())
  • 按照標(biāo)簽的其他屬性獲取某個(gè)標(biāo)簽
html = '<a alog-action="qb-ask-uname" href="/usercent" rel="external nofollow" target="_blank">蝸牛宋</a>'
soup = BeautifulSoup(html, 'lxml')
# 獲取"蝸牛宋",此時(shí),該標(biāo)簽里既沒有class也沒有id,需要根據(jù)其屬性來定義獲取規(guī)則
author = soup.find('a',{"alog-action":"qb-ask-uname"}).get_text()
#或
author = soup.find(attrs={"alog-action": "qb-ask-uname"})
  • 找前頭和后頭的標(biāo)簽
soup.find_all_previous("p")
soup.find_previous("p")
soup.find_all_next("p")
soup.find_next("p")
  • 找父標(biāo)簽
soup.find_parents("div")
soup.find_parent("div")
  • css選擇器
soup.select("title") #標(biāo)簽名
soup.select("html head title") #多級(jí)標(biāo)簽名
soup.select("p > a") #p內(nèi)的所有a標(biāo)簽
soup.select("p > #link1") #P標(biāo)簽內(nèi),按id查標(biāo)簽
soup.select("#link1 ~ .sister") #查找相同class的兄弟節(jié)點(diǎn)
soup.select("#link1 + .sister")
soup.select(".sister") #按class名稱查
soup.select("#sister") #按id名稱查
soup.select('a[ rel="external nofollow" ]') # 按標(biāo)簽的屬性查
soup.select('a[href$="tillie"]')
soup.select_one(".sister")

注意幾個(gè)可能出現(xiàn)的錯(cuò)誤,可以用try捕獲來防止爬蟲進(jìn)程

  • UnicodeEncodeError: ‘charmap' codec can't encode character u'\xfoo' in position bar (或其它類型的 UnicodeEncodeError

需要轉(zhuǎn)碼

  • AttributeError: ‘NoneType' object has no attribute ‘foo'

沒這個(gè)屬性

就介紹這么多,應(yīng)該可以覆蓋大部分網(wǎng)頁結(jié)構(gòu)了吧~!

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • Python動(dòng)態(tài)聲明變量賦值代碼實(shí)例

    Python動(dòng)態(tài)聲明變量賦值代碼實(shí)例

    這篇文章主要介紹了Python動(dòng)態(tài)聲明變量賦值代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • pandas通過字典生成dataframe的方法步驟

    pandas通過字典生成dataframe的方法步驟

    這篇文章主要介紹了pandas通過字典生成dataframe的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • OpenCV搞定騰訊滑塊驗(yàn)證碼的實(shí)現(xiàn)代碼

    OpenCV搞定騰訊滑塊驗(yàn)證碼的實(shí)現(xiàn)代碼

    這篇文章主要介紹了OpenCV搞定騰訊滑塊驗(yàn)證碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • python 基于wx實(shí)現(xiàn)音樂播放

    python 基于wx實(shí)現(xiàn)音樂播放

    這篇文章主要介紹了python 基于wx實(shí)現(xiàn)音樂播放的示例代碼,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-11-11
  • python實(shí)現(xiàn)在無須過多援引的情況下創(chuàng)建字典的方法

    python實(shí)現(xiàn)在無須過多援引的情況下創(chuàng)建字典的方法

    這篇文章主要介紹了python實(shí)現(xiàn)在無須過多援引的情況下創(chuàng)建字典的方法,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-09-09
  • Python 正則表達(dá)式入門(中級(jí)篇)

    Python 正則表達(dá)式入門(中級(jí)篇)

    本文主要介紹子表達(dá)式,向前向后查找,回溯引用,有需要的朋友可以看下,希望對(duì)大家有所幫助
    2016-12-12
  • Python pickle類庫介紹(對(duì)象序列化和反序列化)

    Python pickle類庫介紹(對(duì)象序列化和反序列化)

    這篇文章主要介紹了Python pickle類庫介紹(對(duì)象序列化和反序列化),本文講解了pickle庫的作用、pickle的運(yùn)行過程、使用實(shí)例、修改picklable類型的默認(rèn)行為等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • Pandas統(tǒng)計(jì)計(jì)數(shù)value_counts()的使用

    Pandas統(tǒng)計(jì)計(jì)數(shù)value_counts()的使用

    本文主要介紹了Pandas統(tǒng)計(jì)計(jì)數(shù)value_counts()的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Python Coroutine池化的實(shí)現(xiàn)詳解

    Python Coroutine池化的實(shí)現(xiàn)詳解

    在當(dāng)今計(jì)算機(jī)科學(xué)和軟件工程的領(lǐng)域中,池化技術(shù)如線程池、連接池和對(duì)象池等已經(jīng)成為優(yōu)化資源利用率和提高軟件性能的重要工具,所以下面我們就來看看Coroutine池化的具體實(shí)現(xiàn)吧
    2024-01-01
  • pytorch中Tensor.to(device)和model.to(device)的區(qū)別及說明

    pytorch中Tensor.to(device)和model.to(device)的區(qū)別及說明

    這篇文章主要介紹了pytorch中Tensor.to(device)和model.to(device)的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評(píng)論