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

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

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

摘要

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

beautifulsoup4的使用

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

裝載html文檔

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

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ù),第一個參數(shù)即是我們爬到html源碼,第二個參數(shù)是html解析器,常用的有三個解析器,分別是”html.parser”,”lxml”,”html5lib”,官網(wǎng)推薦用lxml,因為效率高,當然需要pip install lxml一下。

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

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

使用

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

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

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

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

需要轉(zhuǎn)碼

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

沒這個屬性

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

總結(jié)

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

相關(guān)文章

  • Python使用切片移動元素位置的代碼實踐

    Python使用切片移動元素位置的代碼實踐

    在 Python 中,切片是指從序列類型(如列表、字符串、元組等)中提取子序列的過程,切片可以用來快速獲取列表的一部分也可以用于反轉(zhuǎn)列表,本文小編給大家介紹了Python使用切片移動元素位置的代碼實踐,需要的朋友可以參考下
    2024-09-09
  • Python中新式類與經(jīng)典類的區(qū)別詳析

    Python中新式類與經(jīng)典類的區(qū)別詳析

    這篇文章主要給大家介紹了關(guān)于Python中新式類與經(jīng)典類的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-07-07
  • 棧和隊列數(shù)據(jù)結(jié)構(gòu)的基本概念及其相關(guān)的Python實現(xiàn)

    棧和隊列數(shù)據(jù)結(jié)構(gòu)的基本概念及其相關(guān)的Python實現(xiàn)

    這篇文章主要介紹了棧和隊列數(shù)據(jù)結(jié)構(gòu)的基本概念及其相關(guān)的Python實現(xiàn),先進先出和后進先出的知識也已經(jīng)成為了計算機學習中的老生常談了:D需要的朋友可以參考下
    2015-08-08
  • Django執(zhí)行指定腳本的幾種方法

    Django執(zhí)行指定腳本的幾種方法

    這篇文章主要給大家介紹了關(guān)于Django執(zhí)行指定腳本的幾種方法,文中通過實例代碼介紹的非常詳細,對大家學習或者使用Django具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02
  • python實現(xiàn)決策樹分類算法

    python實現(xiàn)決策樹分類算法

    這篇文章主要為大家詳細介紹了python實現(xiàn)決策樹分類算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Python實現(xiàn)為圖片批量添加隨機水印

    Python實現(xiàn)為圖片批量添加隨機水印

    這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)為圖片批量添加隨機水印,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-11-11
  • Python softmax實現(xiàn)及數(shù)值穩(wěn)定性詳解

    Python softmax實現(xiàn)及數(shù)值穩(wěn)定性詳解

    這篇文章主要為大家介紹了Python softmax實現(xiàn)及數(shù)值穩(wěn)定性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Pytorch中expand()的使用(擴展某個維度)

    Pytorch中expand()的使用(擴展某個維度)

    這篇文章主要介紹了Pytorch中expand()的使用(擴展某個維度),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 基于PyQt5制作一個表情包下載器

    基于PyQt5制作一個表情包下載器

    每次和朋友聊天苦于沒有表情包,而別人的表情包似乎是取之不盡、用之不竭。作為一個程序員哪能甘愿認輸,所以本文將用Python制作一個表情包下載器供大家斗圖,需要的可以參考一下
    2022-03-03
  • Python實現(xiàn)將多個文件的名稱或后綴名由大寫改為小寫

    Python實現(xiàn)將多個文件的名稱或后綴名由大寫改為小寫

    這篇文章主要介紹了如何基于Python語言實現(xiàn)將多個文件的名稱或后綴名由大寫字母修改為小寫,文中的示例代碼講解詳細,感興趣的可以了解下
    2023-09-09

最新評論

吴桥县| 滁州市| 航空| 桂林市| 三河市| 芦溪县| 临潭县| 慈溪市| 武城县| 钟祥市| 淮北市| 新野县| 德惠市| 通辽市| 乌苏市| 井陉县| 中西区| 阜新| 金平| 聂拉木县| 容城县| 玉树县| 汉中市| 萨迦县| 苍溪县| 高青县| 汤原县| 吉隆县| 平邑县| 阿克| 永顺县| 芜湖市| 富蕴县| 桓台县| 绥中县| 蕲春县| 和田市| 海安县| 绵阳市| 天峻县| 东丰县|