Python高性能编程 中文高清pdf完整版[17MB]
子节点
一个Tag可能包含多个字符串或其它的Tag,这些都是这个Tag的子节点.BeautifulSoup提供了许多操作和遍历子节点的属性.
注意: BeautifulSoup中字符串节点不支持这些属性,因为字符串没有子节点
一、实例代码
import urllib
from urllib import request
from bs4 import BeautifulSoup
import re
#获取页面
base_url = "http://www.3qphp.com/php/index.html"
urlb = urllib.request.urlopen(base_url)
cent = urlb.read()#解析出链接地址
soup = BeautifulSoup(cent,"html.parser")
slink = soup.find_all("a",href=re.compile(r"\/php\/(.+?)\/(\d+).html"))
#判断获取没有定义class属性,并且子标签中没有span的所有a标签
for link in slink:
if 'class' not in link.attrs and link.contents[0].name != 'span':
print(link)
二、重点知识点BeautifulSoup中attrs和contents属性:
link.attrs
link.contents[0].name
三、BeautifulSoup官方文档解释
tag的 .contents 属性可以将tag的子节点以列表的方式输出:
head_tag = soup.head
head_tag
# <head><title>The Dormouse's story</title></head>
head_tag.contents
[<title>The Dormouse's story</title>]
title_tag = head_tag.contents[0]
title_tag
# <title>The Dormouse's story</title>
title_tag.contents
# [u'The Dormouse's story']
BeautifulSoup 对象本身一定会包含子节点,也就是说<html>标签也是 BeautifulSoup 对象的子节点:
len(soup.contents)
# 1
soup.contents[0].name
# u'html'
字符串没有 .contents 属性,因为字符串没有子节点:
text = title_tag.contents[0]
text.contents
# AttributeError: 'NavigableString' object has no attribute 'contents'
转载请注明:谷谷点程序 » Python3 BeautifulSoup模块(3):bs4通过contents[0]获取子节点中不包含span标签,并且a标签本身不包含class属性的a标签