在学beautifulsoup时候遇到findAll()函数。起初以为它和findall()是一样的,后来发现“腰”粗了,果然就不是同一个人了啊。他们两个最根本的区别在于:
findAl()l在<class 'bs4.BeautifulSoup'>类型的对象里根据标签查找。
而findall()在string里面查找。
findAll()
from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
html=urlopen("http://www.pythonscraping.com/pages/warandpeace.html") #打开url并将内容存入变量名html里
print(type(html))
bsObj=BeautifulSoup(html)
nameList=bsObj.findAll("span",{"class","green"})#寻找标签是span,其value是‘class=green’的内容
for name in nameList:
print(name.get_text())
bsObj=BeautifulSoup(html)这一步十分重要,有了这一步才能使用接下来的findAll。
findall()
- 和compile结合:
>>> import re
>>> s="adfad asdfasdf asdfas asdfawef asd adsfas"
>>> reObj1 = re.compile('((\w+)\s+\w+)')
>>> reObj1.findall(s)
[('adfad asdfasdf', 'adfad'), ('asdfas asdfawef', 'asdfas'), ('asd adsfas', 'asd')]
reObj1是pattern,而s是string。
- 正规用法:pattern和string都在括号内
>>> bsObj="spanno yes sp hu span"
>>> re.findall("span", bsObj)
['span', 'span']