相关文章推荐
怕老婆的扁豆  ·  报错Usage: python -m ...·  6 月前    · 
失恋的马铃薯  ·  linux ...·  10 月前    · 

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
 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 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
 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")
13 # len函数获取子节点的个数
14 print len(list(tag_soup.children))
16 # 获取子孙节点的个数
17 print len(list(tag_soup.descendants))
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
 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")
12 # print body.prettify()
14 ul_soup = tag_soup.find_all("a")
15 print ul_soup
16 for i in ul_soup:
17     print i.string

对python接口自动化有兴趣的,可以加python接口自动化QQ群:226296743

也可以关注下我的个人公众号:

python爬虫:scrapy框架SelectorList.extract()和SelectorList.extract_first()的区别
python爬虫:scrapy框架SelectorList.extract()和SelectorList.extract_first()的区别