Excel中怎样计算面积? Excel制作计算圆面积工具的教程-英雄云拓展知识分享
121
2023-11-13
【摘要】 本书摘自《Python网络爬虫 从入门到精通》一书中第2章,第3节,吕云翔、张扬和韩延刚等编著。
2.3.2 BeautifulSoup 的基本使用
使用 findO方法获取到的结果都是 Tag 对象,这也是 BeautifulSoup 库中的主要对象之 一 。Tag 对象在逻辑上与 XML 或 HTML 文档中的 tag 相同,可以使用 tag.name 和 tagattrs
来访问Tag 对象的名字和属性,获取属性值的操作方法类似字典: tag['href]。
在定位内容时,最常用的就是 find) 和 find_all() 方 法 ,find_allO 方法的定义是:
find_all(name,attrs,recursive,text,**kwargs)
该方法搜索当前这个Tag (这时BeautifulSoup 对象可以被视为一个Tag, 是所有 Tag 的 根 )
的所有Tag 子节点,并判断是否符合搜索条件。 name 参数用于查找所有名字为 name 的 tag:
bs.find_all('tagname')
keyword 参数(使用 Python 中**kwargs 的性质来传递参数)在搜索时支持把该参数当作 指定名字 tag 的属性来搜索,就像这样:
bs.find(href='https://book.douban.com').text
其结果应该是“豆瓣读书”。当然,同时使用多个属性来搜索也是可以的,这里通过 find_all) 方法的 attrs 参数定义一个字典参数来搜索多个属性:
bs.find_all(attrs={"href":re.compile('time'),"class":"title"})
搜索结果是:
[觉知即新生——终止童年创伤的心理修复课 ,歌词时光——姚谦写词课 ,邪典电影本纪——亚文化电影50讲,web_anonymous">白先勇细说红楼梦——从小说角度重解“红楼”,web_anonymous">拍张好照片——10分钟搞定旅行摄影,
web_anonymous">丹青贵公子——艺苑传奇赵孟頫,
醒来——北岛和朋友们的诗歌课, 古今——杨照史记百讲 ,web_anonymous">笔落惊风雨——你不可不知的中国三大名画]
这行代码里出现了 re.compile(), 也就是说使用了正则表达式。如果传入正则表达式作为 参 数 ,BeautifulSoup 会通过正则表达式的 match() 方法来匹配内容。
另外, BeautifulSoup 还支持根据 CSS 来搜索,不过这时要使用 “class_=” 这样的形
式,因为 “class” 在 Python 中是一个保留
bs1.find(class_='video-title')
recursive 参数默认为True,BeautifulSoup 会检索当前 Tag 的所有子孙节点。如果只想搜 索Tag 的直接子节点,可以将其设置为 False。
通过text 参数可以搜索文档中的字符串内容:
bs1.find(text=re.compile('银翼杀手')).parent['href']
输出结果是 “htps://movie.douban.com/subject/10512661/”, 这是电影《银翼杀手2049》 的豆瓣电影主页。find()函数的结果是一个可以遍历的字符串(NavigableString, 就是指一个 Tag 中的字符串),上述语句所做的是使用 parent 访问其所在的 Tag 然后获取 href 属性。可 以看到, text 也支持正则表达式搜索。
find_allO会返回全部的搜索结果,所以如果文档树结构很大,那么很可能并不需要全部 结果。limit 参数可以限制返回结果的数量,当搜索数量达到 limit 值时就会停止搜索。findO 方法实际上就相当于当limit=1 时的 find_all) 方法。
由于 find_all) 如此常用,因此在 BeautifulSoup 中 ,BeautiftulSoup 对象和 Tag 对象可以 被当作一个 find_all()方法来使用,也就是说下面两行代码是等效的:
bs.find_all("a")
bs("a")
下面两行依然等效:
soup.title.find_all(text=“abc”)
soup.title(text=“abc”)
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~