1. 程式人生 > >孤荷淩寒自學python第六十九天學習並實踐beautifulsoup對象用法2

孤荷淩寒自學python第六十九天學習並實踐beautifulsoup對象用法2

淘寶 文件 結果 社區 方式 anon 嘗試 指點 false

孤荷淩寒自學python第六十九天學習並實踐beautifulsoup對象用法2

(完整學習過程屏幕記錄視頻地址在文末)

今天繼續學習beautifulsoup對象的屬性與方法等內容。

一、今天進一步了解到的BeautifulSoup模塊中的一些用法小結:

1.

Html標簽對象.parent

#返回直接上一級父級對象整體

2.

Html標簽對象.parents

#parents返回從a對象的直接父級對象開始的各個逐個上升的父級直到<html></html>級為止的宗譜鏈,是一個生成器

3.

Html標簽對象.next_sibling

#獲取當前Html標簽對象的下一個平級兄弟對象本身

4.

Html標簽對象.previous_sibling

#獲取當前Html標簽對象的上一個平級兄弟對象本身

5.

Html標簽對象.next_siblings

#next_siblings返回和當前Html標簽對象平級的在此之後的所有Html標簽對象的一個生成器

6.

Html標簽對象.previous_siblings

#previous_siblings返回和當前Html標簽對象平級的在此之前的所有Html標簽對象的一個生成器

7.應用可能最多的方法是搜索Html文檔樹中的符合指定特征的Html標簽對象

(1)搜索指定的tag標簽

1)

BeautifulSoup對象.find_all(‘html標簽tag‘)

html標簽tag如:a div p span ……

#執行此方法後返回的是一個bs4.element.ResultSet集合對象,此對象可以理解為列表(list),但此集合中的每一個子元素對象,都可以再次執行.find_all方法,就類似於是BeautifulSoup對象的片斷對象一般。

2)搜索tag標簽時,還可以指定第二個參數,指明此Html標簽對象的一些屬性值的特征

BeautifulSoup對象.find_all(‘ html標簽tag‘,attrs={要篩選的一些屬性字段及值組成的字典對象})

#第二個參數傳入一個字典,即要篩選的Html標簽對象的屬性條件,因為BeautifulSoup對象將任何一個Html標簽對象的屬性都存儲在內置的一個字典對象中

三、我的測試代碼:

```

import requests

from bs4 import BeautifulSoup

import _mty

strHtml=‘‘‘

<html><head><title>孤荷淩寒的測試網頁qq:578652607</title>

<style>

.title{

font-size:20px;

}

.story{

font-size:12px;

}

#divfirst{

font-size:30px;

}

</style>

</head>

<body>

現在網頁的BODY部分開始:

<div id="divfirst" class="story">

現在第一個p標簽馬上開始:

<p id="firstptag" class="title"><b>這是在第一個P標簽中的TEXT</b></p>

<p class="story">現在分享一些網站鏈接:

</br>

<a href="http://www.baidu.com/" class="sister"

id="link1">1.百度鏈接</a>,

<a href="http://www.taobao.com/" class="sister"

id="link2">2.淘寶鏈接</a> and

<a href="3.http://www.jianshu.com/" class="sister"

id="link3">3。簡書鏈接</a>;

</br>

所有鏈接分享完了</p>

現在第一個P標簽已結束。

</div>

接下來第二個DIV開始

<div id="divsecond" class="title">

<p class="story">

<a href="http://www.lhghroom.cn/" id="a_ghlh"><span id="spanone">4.孤荷淩寒的小站</span></a>

</p>

</div>

現在body部分結束了

</body>

</html>

‘‘‘

def msgbox(info,titletext=‘孤荷淩寒的DB模塊對話框QQ578652607‘,style=0,isShowErrMsg=False):

return _mty.msgboxGhlh(info,titletext,style,isShowErrMsg)

def myfirst(s,h):

#r=requests.get(s,headers=h)

#print(r.text) #r.text得到的是頁面源html代碼

bs=BeautifulSoup(strHtml,features="lxml") #第二個參數指明了解析器,得到的是一個beautifulsoup對象

#-----測試用法

#strnew=bs.prettify() #對html源代碼 進行了美化。

#print(strnew)

#-------訪問html文檔中第一個指定tag標識的html標簽元素的方法-----------

#print(bs.p) #這種方法將返回html文檔中的第一個p標簽本身這個對象,不是文本,但Print之後會顯示為如:【<p class="title" id="firstptag"><b>這是在第一個P標簽中的TEXT</b></p>】

#print(bs.p) #重復執行,也只是返回html文檔 中的第一個P標簽

#msgbox(str(bs.a)) #bs.a 返回的是一個對象,而不是文本字符串

a=bs.a #得到了Html文檔中的第一個a標簽本身這個對象

#-----獲取Html標簽元素對象的屬性,及相關對象--------------

#---以字典的方式 存放著Html標簽元素對象的屬性----

#msgbox(a[‘href‘]) #a的Html標簽元素對象的 鏈接地址 這個屬性

#msgbox(a.get(‘href‘))

#----標簽的內嵌內容(innertext)存放在Html標簽元素對象的string屬性中

#msgbox(a.string)

#---獲取一個Html標簽元素對象下的所有子對象集-------------------------------------------

#elements=bs.body.contents #返回的是列表,列表中的元素,包括了此Html標簽元素對象下的直屬一級子對象。

#print(elements)

#elements=bs.div.children #返回的是一個叠代器對象,其中的內容與上一個屬性獲取 的一致

#print(list(elements))

#----獲取父對象--------------

#print(a.parent) #返回直接上一級父級對象整體

#g=a.parents #parents返回從a對象的直接父級對象開始的各個逐個上升的父級直到<html></html>級為止的宗譜鏈,是一個生成器

#for i in g:

# msgbox(str(i))

#-----獲取平級兄弟對象-----------------

#m=a.next_sibling #獲取當前Html標簽對象的下一個平級兄弟對象本身

#m=m.previous_sibling #獲取當前Html標簽對象的上一個平級兄弟對象本身

#msgbox(str(m))

#------

#g=a.next_siblings #next_siblings返回和當前Html標簽對象平級的在此之後的所有Html標簽對象的一個生成器

#msgbox(str(type(g)))

#for i in g:

# msgbox(str(i))

#m=a.next_sibling.next.next_sibling.next_sibling.next_sibling

#g=m.previous_siblings #previous_siblings返回和當前Html標簽對象平級的在此之前的所有Html標簽對象的一個生成器

#for i in g:

# msgbox(str(i))

#---搜索Html文檔樹中的符合指定特征的Html標簽對象---------------

#===============================================

#------搜索tag標簽------------------

#alla=bs.find_all(‘a‘) #返回的是一個bs4.element.ResultSet集合對象,此對象可以理解 為LIST,但集合中的每一個子元素對象,都可以再次執行.find_all方法,就類似於是BeautifulSoup對象的片斷對象一般。

#print(type(alla))

#msgbox(str(type(alla)))

#for i in alla:

# msgbox(str(i))

#--------搜索tag標簽時,還可以指定第二個參數,指明此Html標簽對象的一些屬性值的特征----

alla=bs.find_all(‘a‘,attrs={‘id‘:‘a_ghlh‘}) #第二個參數傳入一個字典,即要篩選的Html標簽對象的屬性條件,因為bs對象將任何一個Html標簽對象的屬性都存儲在內置的一個字典對象中

for i in alla:

msgbox(str(i))



strurl=‘http://www.dianping.com/‘

header={

‘Host‘:‘www.dianping.com‘,

‘User-Agent‘:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36‘

}

myfirst(strurl,header)

```

——————————

今天整理的學習筆記完成,最後例行說明下我的自學思路:

根據過去多年我自學各種編程語言的經歷,認為只有真正體驗式,解決實際問題式的學習才會有真正的效果,即讓學習實際發生。在2004年的時候我開始在一個鄉村小學自學電腦 並學習vb6編程語言,沒有學習同伴,也沒有高師在上,甚至電腦都是孤島(鄉村那時還沒有網絡),有的只是一本舊書,在痛苦的自學摸索中,我找到適應自己零基礎的學習方法:首先是每讀書的一小節就作相應的手寫筆記,第二步就是上機測試每一個筆記內容是否實現,其中會發現書中講的其實有出入或錯誤,第三步就是在上機測試之後,將筆記改為電子版,形成最終的修訂好的正確無誤的學習筆記 。

通過反復嘗試錯誤,在那個沒有分享與交流的黑暗時期我摸黑學會了VB6,爾後接觸了其它語言,也曾聽過付費視頻課程,結果發現也許自己學歷果然太低,就算是零基礎的入門課程,其實也難以跟上進度,講師的教學多數出現對初學者的實際情況並不了解的情況,況且學習者的個體也存在差異呢?當然更可怕的是收費課程的價格往往是自己難以承受的。

於是我的所有編程學習都改為了自學,繼續自己的三步學習筆記法的學習之路。

當然自學的最大問題是會走那麽多的彎路,沒有導師直接輸入式的教學來得直接,好在網絡給我們帶來無限搜索的機會,大家在網絡上的學習日誌帶給我們共享交流的機會,而QQ群等交流平臺、網絡社區的成立,我們可以一起自學,互相批評交流,也可以獲得更有效,更自主的自學成果。

於是我以人生已過半的年齡,決定繼續我的編程自學之路,開始學習python,只希望與大家共同交流,一個人的獨行是可怕的,只有一群人的共同前進才是有希望的。

誠摯期待您的交流分享批評指點!歡迎聯系我加入從零開始的自學聯盟。

這個時代互聯網成為了一種基礎設施的存在,於是本來在孤獨學習之路上的我們變得不再孤獨,因為網絡就是一個新的客廳,我們時刻都可以進行沙龍活動。

非常樂意能與大家一起交流自己自學心得和發現,更希望大家能夠對我學習過程中的錯誤給予指點——是的,這樣我就能有許多免費的高師了——這也是分享時代,社區時代帶來的好福利,我相信大家會的,是吧!

根據完全共享的精神,開源互助的理念,我的個人自學錄制過程是全部按4K高清視頻錄制的,從手寫筆記到驗證手寫筆記的上機操作過程全程錄制,但因為4K高清文件太大均超過5G以上,所以無法上傳至網絡,如有需要可聯系我QQ578652607對傳,樂意分享。上傳分享到百度網盤的只是壓縮後的720P的視頻。

我的學習過程錄像百度盤地址分享如下:(清晰度:1280x720)

鏈接:https://pan.baidu.com/s/1kFPBDZH6pscVFbM6SkPnnQ

提取碼:b6mr

Bilibili:

https://www.bilibili.com/video/av40434837/

喜馬拉雅語音筆記:

https://www.ximalaya.com/keji/19103006/152838374

孤荷淩寒自學python第六十九天學習並實踐beautifulsoup對象用法2