BeautifulSoup

bs4

Tag

标签及其内容:拿到它所找到的第一个内容

from bs4 import BeautifulSoup

file = open('./baidu.html','rb')
html = file.read()
bs = BeautifulSoup(html,'html.parser')
#html.parser是一个html类型的解析器

print(bs.title)
print(bs.a)
print(type(bs.head))

#Tag  标签及其内容:拿到它所找到的第一个内容

运行结果

<title>百度一下,你就知道 </title>
<a class="mnav" href="http://news.baidu.com" name="tj_trnews"><!--新闻--></a>
<class 'bs4.element.Tag'>  #表示类型是tag

NavigableString

  • 标签里的内容(字符串)
print(bs.title.string)

print(type(bs.title.string))

运行结果

百度一下,你就知道   
<class 'bs4.element.NavigableString'>
  • 标签里的内容(属性)
print(bs.a.attrs)
{'class': ['mnav'], 'href': 'http://news.baidu.com', 'name': 'tj_trnews'}

BeautifulSoup

表示整个文档

print(type(bs))
print(bs.name)
print(bs)

Comment

特殊的NavigableString,输出的内容不包含注释符号

使用方法

文档的遍历

#文档的遍历
print(bs.head.contents)     #将tag的子节点以列表的方式输出
print(bs.head.contents[1])  #用列表索引来获取它的某一个元素

有更多方法,但使用效果不如文档的搜索

文档的搜索

  1. find_all()
  • find_all()

把所有找出来的东西统一放进列表里

#字符串过滤:会查找与字符串完全匹配的内容
t_list = bs.find_all('a')
  • 正则表达式
import re
t_list = bs.find_all(re.compile('a'))
#只要标签里含有a,就把这个标签及其里面所有内容找出来
  • 方法
    传入一个函数(方法),根据函数的要求来搜索`
def name_is_exists(tag):
    return tag.has_attr('name')

t_list = bs.find_all(name_is_exists)
  • kwarge 参数
t_list = bs.find_all(id='head')  #指定参数
t_list = bs.find_all(class_=True)
for item in t_list:
    print(item)
  • text 参数
#t_list=bs.find_all(text='hao123')
t_list=bs.find_all(text=['hao123','地图','贴吧'])
for item in t_list:
    print(item)

运行结果:

hao123
地图
贴吧

运用正则表达式
来查找包含特定文本的内容(标签里的字符串)

t_list = bs.find_all(text=re.compile('\d'))  #查找包含数字的文本内容
for item in t_list:
    print(item)

运行结果:
hao123 #包含数字的字符串

  • limit 参数

限定直接获取到的个数

t_list = bs.find_all('a',limit=2)

运行结果:
在这里插入图片描述

  1. css 选择器
t_list = bs.select('title')  #通过标签来查找
t_list = bs.select('.mnav')  #通过类名来查找
t_list = bs.select('#u1')     #通过id来查找
t_list = bs.select('a[class="bri"]')  #通过属性来查找
t_list = bs.select("head>title")  #通过子标签来查找

for item in t_list:
    print(item)
t_list = bs.select(".mnav ~ .bri") #通过兄弟标签来查找
print(t_list[0].get_text())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值