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

来源:互联网 发布:ubuntu 设置apt源 编辑:程序博客网 时间:2024/05/25 05:38

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


find()和findAll()

在BeautifulSoup中的定义为:

findAll(tag, attributes, recursive, text, limit, keywords)find(tag, attributes, recursive, text, keywords)

注意事项一

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

注意事项二

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

from urllib.request import urlopenfrom bs4 import BeautifulSouphtml = 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 属性查找标签的时候,因为classPython中受保护的关键字。也就是说,classPython 语言 的保留字,在Python 程序里是不能当作变量或参数名使用的。假如你运行下面的代码,Python 就会因为你误用 class保留字而产生一个语法错误:

bsObj.findAll(class="green")

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

bsObj.findAll(class_="green")

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

bsObj.findAll("",{class:"green"})
原创粉丝点击