BeautifulSoup
是Python
里最受欢迎的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"})