python爬蟲beautifulsoup4系列4-子節點


前言

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

 

一、子節點

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 i 17 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_soup
16 for i in ul_soup:
17     print i.string
復制代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM