使用BeautifulSoup中的find()和findAll()函数时关键字参数的注意事项

BeautifulSoupPython里最受欢迎的HTML解析库之一。它可以提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。


find()和findAll()

在BeautifulSoup中的定义为:

findAll(tag, attributes, recursive, text, limit, keywords)
find(tag, attributes, recursive, text, keywords)
  • 1
  • 2

注意事项一

两者看起来定义大部分相似,唯一不同时findAll()中多了一个参数limit。 
在实际使用中,find()就相当于findAll()中limit = 1时的特殊情况。

注意事项二

有一个关键字参数keyword,可以用让我们选择具体的指定属性的标签。如:

from urllib.request import urlopen
from bs4 import BeautifulSoup

html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj = BeautifulSoup(html, "lxml")

# 查找出关键字为text的属性标签
allText = bsObj.findAll(id = 'text')
print(allText[0].get_text())

# 下面两行代码是完全一样的
Text1 = bsObj.findAll(id = 'text')
Text1 = bsObj.findAll("",{'id' : 'text'})
  •  

但是我们在使用keyword的时候偶尔会出现问题,尤其是在尤其是在用 class 属性查找标签的时候,因为class 是 Python中受保护的关键字。也就是说,class 是Python 语言 的保留字,在Python 程序里是不能当作变量或参数名使用的。假如你运行下面的代码,Python 就会因为你误用 class保留字而产生一个语法错误:

bsObj.findAll(class="green")
  • 1

BeautifulSoup提供的解决方法为在class后面加上下划线:

bsObj.findAll(class_="green")
  • 1

或者使用属性参数把class用引号包起来。

bsObj.findAll("",{class:"green"})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值