最新消息: 新版网站上线了!!!

Python3 BeautifulSoup模块(3):bs4通过contents[0]获取子节点中不包含span标签,并且a标签本身不包含class属性的a标签

子节点

一个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标签