BeautifulSoup的简单使用(下)

接上文,上回说到,获取a标签的所有属性,返回一个字典,用print(bs.a.atters),那接着来,

print(type(bs))

这个没什么好说的,就是打印一下获取到的bs的类型,简单放一下结果

D:\program\python\python\python.exe "D:/program/python/douban/test/test Bs4.py"
<class 'bs4.BeautifulSoup'>

进程已结束,退出代码0

(5)

print(bs.a.string)
print(type(bs.a.string))

把这两行放在一起,其作用分别是

第一行:

获取所有与a有关的东西的字符串

第二行:

打印所获取到的字符串的类型

D:\program\python\python\python.exe "D:/program/python/douban/test/test Bs4.py"
新闻
<class 'bs4.element.Comment'>

进程已结束,退出代码0

注意:Comment是一个特殊的NavigableString,输出的内容不包含注释符号

3、文档的遍历

print(bs.head.contents)
print(bs.head.contents[1])

结果

D:\program\python\python\python.exe "D:/program/python/douban/test/test Bs4.py"
['\n', <meta charset="utf-8"/>, '\n', <link href="https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css" rel="stylesheet" type="text/css"/>, '\n', <title>百度一下,你就知道</title>, '\n']
<meta charset="utf-8"/>

进程已结束,退出代码0

可以看到,代码第一行获取到了head的内容并打印

第二行 ,打印出head中的第一个内容,需要注意的是,这里的下标不是从0开始,而是从1开始

4、文档的搜索

(1)、find_all    字符串过滤,会查找与字符串完全匹配的内容

t_list = bs.find_all("a")
print(t_list)

结果

D:\program\python\python\python.exe "D:/program/python/douban/test/test Bs4.py"
[<a class="mnav" href="http://news.baidu.com" name="tj_trnews"><!--新闻--></a>, <a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>, <a class="mnav" href="http://www.hao123.com" name="tj_trhao123">hao123</a>, <a class="mnav" href="http://map.baidu.com" name="tj_trmap">地图</a>, <a class="mnav" href="http://v.baidu.com" name="tj_trvideo">视频</a>, <a class="mnav" href="http://tieba.baidu.com" name="tj_trtieba">贴吧</a>, <a class="bri" href="http://news.baidu.com/more/" name="tj_briicon" style="...">更多产品</a>]

进程已结束,退出代码0

ps: 其实打印出来我才发现,这玩意和print(bs.a)区别不大,下面放一下对比一下

第一个

---------------------------------------------------------------------------------------------------------------------------------

t_list = bs.find_all("a")
print(t_list)
D:\program\python\python\python.exe "D:/program/python/douban/test/test Bs4.py"
[<a class="mnav" href="http://news.baidu.com" name="tj_trnews"><!--新闻--></a>, <a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>, <a class="mnav" href="http://www.hao123.com" name="tj_trhao123">hao123</a>, <a class="mnav" href="http://map.baidu.com" name="tj_trmap">地图</a>, <a class="mnav" href="http://v.baidu.com" name="tj_trvideo">视频</a>, <a class="mnav" href="http://tieba.baidu.com" name="tj_trtieba">贴吧</a>, <a class="bri" href="http://news.baidu.com/more/" name="tj_briicon" style="...">更多产品</a>]

进程已结束,退出代码0

---------------------------------------------------------------------------------------------------------------------------------

第二个

---------------------------------------------------------------------------------------------------------------------------------

print(bs.a)
<a class="mnav" href="http://news.baidu.com" name="tj_trnews"><!--新闻--></a>

---------------------------------------------------------------------------------------------------------------------------------

但是,一对比,我觉得我太草率了,然后我突然想到了它俩的区别

前者是把与之有关的全部寻找出来,而后者是从上往下找,只打印第一个。

(2)、正则表达式搜索:使用search()方法来匹配内容

t_list = bs.find_all(re.compile("a"))
print(t_list)

结果

D:\program\python\python\python.exe "D:/program/python/douban/test/test Bs4.py"
[<head>
<meta charset="utf-8"/>
<link href="https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css" rel="stylesheet" type="text/css"/>
<title>百度一下,你就知道</title>
</head>, <meta charset="utf-8"/>, <a class="mnav" href="http://news.baidu.com" name="tj_trnews"><!--新闻--></a>, <a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>, <a class="mnav" href="http://www.hao123.com" name="tj_trhao123">hao123</a>, <a class="mnav" href="http://map.baidu.com" name="tj_trmap">地图</a>, <a class="mnav" href="http://v.baidu.com" name="tj_trvideo">视频</a>, <a class="mnav" href="http://tieba.baidu.com" name="tj_trtieba">贴吧</a>, <a class="bri" href="http://news.baidu.com/more/" name="tj_briicon" style="...">更多产品</a>]

进程已结束,退出代码0

仍然是查找与“a”有关的内容, 只不过换了种方法,依旧是全局搜索

(3)、传入一个函数(方法),根据函数的要求来搜索

def name_is_exists(tag):
    return tag.has_attr("name")


t_list = bs.find_all(name_is_exists)
for item in t_list:
    print(item)

这部分我学的也不是太懂,在这里先强行理解一下

定义一个函数,名字叫做name_is_exists(tag),第二句没看懂,返回一个tag,获取name?

第三行,找到函数指定的东西,赋值给t_list

第四行,写一个循环

打印所有在t_list中的item

---------------------------------------------------------------------------------------------------------------------------

结果

D:\program\python\python\python.exe "D:/program/python/douban/test/test Bs4.py"
[<head>
<meta charset="utf-8"/>
<link href="https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css" rel="stylesheet" type="text/css"/>
<title>百度一下,你就知道</title>
</head>, <meta charset="utf-8"/>, <a class="mnav" href="http://news.baidu.com" name="tj_trnews"><!--新闻--></a>, <a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>, <a class="mnav" href="http://www.hao123.com" name="tj_trhao123">hao123</a>, <a class="mnav" href="http://map.baidu.com" name="tj_trmap">地图</a>, <a class="mnav" href="http://v.baidu.com" name="tj_trvideo">视频</a>, <a class="mnav" href="http://tieba.baidu.com" name="tj_trtieba">贴吧</a>, <a class="bri" href="http://news.baidu.com/more/" name="tj_briicon" style="...">更多产品</a>]

进程已结束,退出代码0

结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值