python爬蟲beautifulsoup4系列4-子節點

來源:互聯網
上載者:User

標籤:rdd   name   stp   UI   smo   gdi   poj   tla   uem   

前言

很多時候我們無法直接定位到某個元素,我們可以先定位它的父元素,通過父元素來找子項目就比較容易

 

一、子節點

1.以部落格園首頁的摘要為例:<div class="c_b_p_desc">這個tag為起點

2.那麼div這個tag就是父節點

3."摘要: 前言 本篇詳細。。。"這個string就是上面div的子節點(string通常看成是一個tag的子節點)

4."<a class="c_b_p_desc_readmore" href="http://www.cnblogs.com/yoyoketang/p/6906558.html">閱讀全文</a>"這個也是div的子節點

 

二、.contents

1.tag對象contents可以擷取所有的子節點,返回的是list

2.len()函數統計子節點的個數

3.通過下標可以取出對應的子節點

 1 # coding:utf-8 2 from bs4 import BeautifulSoup 3 import requests 4  5 r = requests.get("http://www.cnblogs.com/yoyoketang/") 6 # 請求首頁後擷取整個html介面 7 blog = r.content 8 # 用html.parser解析html 9 soup = BeautifulSoup(blog, "html.parser")
10 # find方法尋找頁面上第一個屬性匹配的tag對象11 tag_soup = soup.find(class_="c_b_p_desc")
12 # len函數擷取子節點的個數13 print len(tag_soup.contents)
14 # 迴圈列印出子節點15 for i in tag_soup.contents:16 print i17 18 # 通過下標取出第1個string子節點19 print tag_soup.contents[0]20 # 通過下標取出第2個a子節點21 print tag_soup.contents[1]

 

三、.children

1.點children這個產生的是list對象,跟上面的點contents功能一樣

2.只是這裡是list對象,就只能for迴圈讀出了,不能通過下標擷取

(一般上面那個contents用的比較多,可能children效能更快吧,我猜想的嘿嘿!)

 

四、.descendants

1.上面的contents只能擷取該元素的直接子節點,如果這個元素的子節點又有子節點(也就是孫節點了),這時候擷取所有的子孫節點就可以用.descendants方法

2.擷取div的子節點有兩個,子孫節點有三個,因為a標籤下還有個“閱讀全文”這個string子節點

 1 # coding:utf-8 2 from bs4 import BeautifulSoup 3 import requests 4  5 r = requests.get("http://www.cnblogs.com/yoyoketang/") 6 # 請求首頁後擷取整個html介面 7 blog = r.content 8 # 用html.parser解析html 9 soup = BeautifulSoup(blog, "html.parser")10 # find方法尋找頁面上第一個屬性匹配的tag對象11 tag_soup = soup.find(class_="c_b_p_desc")12 13 # len函數擷取子節點的個數14 print len(list(tag_soup.children))15 16 # 擷取子孫節點的個數17 print len(list(tag_soup.descendants))18 19 for i in tag_soup.descendants:20     print i

 

 

五、爬取部落格首頁的標籤內容

1.部落格左側的標籤並不是這個連結:http://www.cnblogs.com/yoyoketang/

2.通過抓包可以看到,這個url地址是:http://www.cnblogs.com/yoyoketang/mvc/blog/sidecolumn.aspx?blogApp=yoyoketang

2.可以先定位父元素:<div class="catListTag">

 

六、參考代碼:

 1 # coding:utf-8 2 from bs4 import BeautifulSoup 3 import requests 4  5 r = requests.get("http://www.cnblogs.com/yoyoketang/mvc/blog/sidecolumn.aspx?blogApp=yoyoketang") 6 # 請求首頁後擷取整個html介面 7 blog = r.content 8 # 用html.parser解析html 9 soup = BeautifulSoup(blog, "html.parser")10 tag_soup = soup.find(class_="catListTag")11 12 # print body.prettify()13 14 ul_soup = tag_soup.find_all("a")15 print ul_soup16 for i in ul_soup:17     print i.string

 

對python介面自動化有興趣的,可以加python介面自動化QQ群:226296743

也可以關注下我的個人公眾號:

python爬蟲beautifulsoup4系列4-子節點

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.