BeautifulSoup 文档里,find、find_all两者的定义如下:
find_all(tag, attributes, recursive, text, limit, keywords)
find_all(标签、属性、递归、文本、限制、关键词)
find(tag, attributes, recursive, text, keywords)
find与find_all的区别,find只会取符合要求的第一个元素,find_all会根据范围限制参数limit限定的范围取元素(默认不设置代表取所有符合要求的元素,find 等价于 find_all的 limit =1 时的情形),接下来将对每个参数一一介绍。
另外,find_all会将所有满足条件的值取出,组成一个list
一、标签tag
标签参数 tag 可以传一个标签的名称或多个标签名称组成的set做标签参数。例如,下面的代码将返回一个包含 HTML 文档中所有标题标签的列表: find_all({"h1","h2","h3"})
下面以中原网页面举例,如下图,现在要将页面上的所有标题取出,观察html可以发现,标题对应的tag 是h4,则soup.find_all('h4')
from bs4 import BeautifulSoup
import requests
url = 'https://gz.centanet.com/ershoufang/'
urlhtml=requests.get(url)
urlhtml.encoding='utf-8'
soup=BeautifulSoup(urlhtml.text,'lxml')
alink = soup.find_all('h4')
print(alink)
上面例子只是一个标签的情况,如果多个标签写法相同,只是注意要将所有的标签写在一个set里面
二、属性attributes
属性参数 attributes 是用字典封装一个标签的若干属性和对应的属性值。如,下面这个函数会返回 HTML 文档里"house-name", "house-txt"两种的 p 标签。find_all("p", {"class":{"house-name", "house-txt"}})
如下图,现在要获取红色框选中的三行信息,通过观察可知,三行信息属性"house-name", "house-txt",标签为p,则
alink = soup.find_all("p", {"class":{"house-name", "house-txt"}})
print(alink)
三、递归recursive
递归参数 recursive 是一个布尔变量。你想抓取 HTML 文档标签结构里多少层的信息?如recursive 设置为 True, find_all 就会根据你的要求去查找标签参数的所有子标签,以及标签的子标签。如果 recursive 设置为 False, find_all 就只查找文档的一级标签。 find_all默认是支持递归查找的(recursive 默认值是 True);一般情况下这个参数不需要设置,非你真正了解自己需要哪些信息,而且抓取速度非常重要,那时你可以设置递归参数。
这个太少用了(反正我自己就没用过,不举例了)
四、文本text
文本参数 text 有点不同,它是用标签的文本内容去匹配,而不是用标签的属性。
直接举例吧,在这个网页中,我们要查找一下,户型为“2室1厅”的有多少个,则
alink = soup.find_all(text='2室1厅')
print(alink)
需要特别注意一点,这里查找是用的是完全匹配原则,意思是如果这里你用了find_all(text='2室'),得到的结果会是0个
五、关键词keywords
关键词参数 keyword,自己选择那些具有指定属性的标签
同样是上面网页的内容,现在要取id='one2'的内容,则
from bs4 import BeautifulSoup
import requests
url = 'http://zfcj.gz.gov.cn/data/laho/projectdetail.aspx?changeproInfoTag=1&changeSellFormtag=1&pjID=47140&name=fdcxmxx'
urlhtml=requests.get(url)
urlhtml.encoding='utf-8'
soup=BeautifulSoup(urlhtml.text,'lxml')
alink = soup.find_all(id="one2")
print(alink)
注意:如果是class、id等参数,用keywords 或者attributes用法一样,如果是一些其他参数,则用keywords
来源:CSDN
作者:J符离
链接:https://blog.csdn.net/qq_22592457/article/details/95191430