BeautifulSoup之find(),find_all(),select()

BeautifulSoup介绍

BeautifulSoup是python的一个库,算是python爬虫的一大利器。它的功能就是解析网页数据。

Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。
摘自https://cuiqingcai.com/1319.html

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: 其他一些参数
'''

# soup.find(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

# soup.find(name, attrs)
soup.find("a", class_="sister")  # <a class="sister" href="http://example.com/elsie" id="link1">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="http://example.com/elsie" class="sister" id="link1">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="http://example.com/elsie" id="link1">Elsie</a>,
#  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]

select()方法

'''
BeautifulSoup支持最常用的CSS选择器. 将字符串str传递到标签对象或者BeautifulSoup对象自身的select()方法中.
'''
soup.select("p.strikeout.body")
# [<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('p.info')
txt=p2[0].select('span')[0].get_text()

一般来说,find_all()和find()方法较为普遍;select()方法比较简洁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值