BeautifulSoup介绍
BeautifulSoup是python的一个库,算是python爬虫的一大利器。它的功能就是解析网页数据。
Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。
摘自/
BeautifulSoup3目前停止开发,我们如果要使用推荐下载使用bs4(BeautifulSoup 4.3.2)。
find()方法
'''
find(name, attrs, recursive, string, **kwargs)
@PARAMS:
name: 查找的value,可以是string,list,function,真值或者re正则表达式
attrs: 查找的value的一些属性,class等。
recursive: 是否递归查找子类,bool类型
string: 使用此参数,查找结果为string类型;如果和name搭配,就是查找符合name的包含string的结果。
**kwargs: 其他一些参数
'''
# (name)
soup.find("title") # <title>The Dormouse's story</title>
def has_class_but_no_id(tag):
return tag.has_attr('class') and not tag.has_attr('id')
soup.find(has_class_but_no_id) # <p class="title"><b>The Dormouse's story</b></p>
soup.find(re.compile("t")).name # html
soup.find(["a", "b"]) # <b>The Dormouse's story</b>
soup.find(True) # html
# (name, attrs)
soup.find("a", class_="sister") # <a class="sister" href="/elsie" >Elsie</a>
soup.find("a", attrs={"class": "sister"})
# soup(string='string')
soup.find(string="Elsie") # u'Elsie'
# soup(name, string='string')
soup.find("a", string="Elsie") # <a href="/elsie" class="sister" >Elsie</a>
find_all()方法
'''
find_all(name, attrs, recursive, string, limit, **kwargs)
@PARAMS:
name: 查找的value,可以是string,list,function,真值或者re正则表达式
attrs: 查找的value的一些属性,class等。
recursive: 是否递归查找子类,bool类型
string: 使用此参数,查找结果为string类型;如果和name搭配,就是查找符合name的包含string的结果。
limit: 查找的value的个数
**kwargs: 其他一些参数
'''
find_all("a", attrs={"class": "sister"}, limit=2, string=["Elsie", "Lacie"], recursive=True)
# [<a class="sister" href="/elsie" >Elsie</a>,
# <a class="sister" href="/lacie" >Lacie</a>]
select()方法
'''
BeautifulSoup支持最常用的CSS选择器. 将字符串str传递到标签对象或者BeautifulSoup对象自身的select()方法中.
'''
soup.select("")
# [<p class="body strikeout"></p>]
简单比较
# find_all()与find()方法
p1=soup.find_all('p',class_='info')
txt=p1[0].find('span').string
# select()方法
p2=soup.select('')
txt=p2[0].select('span')[0].get_text()
一般来说,find_all()和find()方法较为普遍;select()方法比较简洁。