BeautifulSoup 爬取网络数据(2).find_all()

2. find() 和 find_all()

推荐有能力的各位查看BeautifulSoup官方文档,这里简单讲解一下。
请看以下比较:

  find_all(tag, attributes, recursive, text,limit, keywords)
# find_all(标签, 属性, 递归, 文本,限制查询数量, 关键字)
  find(tag,attributes, recursive, text,keywords)
#find 相当于find_all(,limit=1)

绝大多数的情况我们只会遇到前两个参数,tag和attributes。tag和attributes都可以查找多个值。


from urllib.request import urlopen

from bs4 import BeautifulSoup

url ='http://www.pythonscraping.com/pages/warandpeace.html'

html= urlopen(url) #抓取了该url网页

soup = BeautifulSoup(html) #使用BeautifulSoup对网页进行解析

hs = soup.find_all({'h1', 'h2'})#find_all抓取所有绿色字体,返回list

print(hs)

得到结果:

[

War and Peace

,

Chapter 1

]

同理,属性参数也可以包含多个属性。例如需要查找所有绿色和红色的文本:

....
words = soup.find_all('span', {'class':{'green', 'red'}})
print(len(words))

有兴趣的朋友可以看看绿色和红色的tag分别有多少个。

关键字参数可以用来选择包含特定属性的是标签,比如:

all_text = soup.find_all(id = 'text')
print(all_text[0].get_text()

细心的朋友可能会注意到,其实关键字参数匹配完全可以用属性参数替换。

soup.find_all(id='text')
soup.find_all("",{"id":"text"})
soup.find_all(class="green")
soup.find_all('',{'class':'green'})

注意: 在BeautifulSoup4版本中find_all 和findAll 是一样的。find_all是新版本的写法,findAll是旧版本的写法,但是目前二者在版本4中通用。

你可能感兴趣的:(BeautifulSoup 爬取网络数据(2).find_all())