python 如何使用find和find_all爬虫、找文本的实现

这篇文章我们来讲讲如何在python使用bs4模块返回值中正确使用find和find_all来取值。

我们先来看看find函数在两种场景使用: 一、 find在字符串(str)时可以查找使用。

在字符串(str)是怎么来使用find函数,find函数就是找到的意思。

我们来看看下面案例

1
2
3
4
#---------案例1-----------
a='0123456789'#因为我们电脑中的字节都是从0开始算第一个位置
b=a.find('0')#这行代码的意思就是我要查找a中0的位置
print(b)
>>0

#这里就是打印出来的内容

应为0在a中的第0个位置

在来试试第二个案例

1
2
3
4
#---------案例2-----------
a='0123456789'
b=a.find('5')#我要查找a中5的位置
print(b)
>>5

其中你要查找的内容不在a中,则会返回 -1 。在str中的使用方法说到这里。

二、 find在bs4模块返回值中怎么使用

我们在课堂上学过,bs4返回的值是 <class 'bs4.BeautifulSoup'>

假设我把把bs4返回的值赋值给 bs

这时我们就要用 bs.find(class_=‘one')

这个代码就是在bs值中从上往下找,找到第一个类等于one的值。

如果下图
在这里插入图片描述
从上到下找是不是我标出来蓝色区域是我要找的类,对的我们把他赋值给one,我们把他打印出来

1
print('one')
这时候系统就会返回这样一个值给我们,如下图
在这里插入图片描述
大家看,他返回的是从 class='one'开始到这个类标签ul结束,对的,他不会返回其他值,他只会返回这个类的标签开始到结束。

所以当bs4返回值时,第一步使用find找打包含自己要找的所有值中第一个父类,再赋值给函数,这样这个函数就是我们进行下一步查找的对象。

接下俩我们就还可以使用find(找到)或者find_all(找到全部一样的),来定位函数位置,像图中:
在这里插入图片描述

class="navbar-branding"就只有一个,我们像打印出 开发者的网上家园 怎么写

这时候我们假设,上面bs.find(class_='one')赋值给one函数那么我们就从one开始查找
one.find(class="navbar-branding")这样查找出来的内哦让那个就会返回给我们这个区域内容
在这里插入图片描述
然后这个区域的文字再title值里面,我们就没办法直接用 .text 取值了,所以我们要接着查找

将one.find(class="navbar-branding")赋值给 one_1

然后用 one_1.find('a')来查找到a标签

后面加一个中括号取值[‘title']这样打印出来内容就是“开发者的网上家园”了。

连起来就是这样写

1
print(one_1.find('a') ['title'])
下面我们把代码连起来打一遍看图
在这里插入图片描述

看代码

1
2
3
4
5
6
one=bs.find(class_='one')
        one_1=one.find(class="navbar-branding")
    print(one_1.find('a') ['title'])
 
>>开发者的网上家园
#这就是最后返回的值
就这么简单。

三、 find_all在bs4模块返回值中怎么使用

还是用上图举例
在这里插入图片描述
我们可以看到如果我要取下面的 li 标签中的值怎么办

这时候我们就得用到find_al了(查找全部一样的)

先补充代码到这个li标签的父类

1
2
one=bs.find(class_='one')
one_1=one.find(class="navbar-branding")
然后我们用one_1来取值如下代码

1
one_1.find_all('li')#这时候我们取值了再one_1区域中所有有li便签的内容
他会返回给我们一个列表

列表时这样的

1
<li>…</li>,<li>…</li>,<li>…</li>,<li>…</li>,<li>…</li>,<li>…</li>
每一个区域就是一个内容,中间的。。。我时为了图省事,其实都是内容。

竟然得到这样的一个列表我们就可以使用for I in one_1.find_all('li')

这样取遍历出这个列表的东西,然后取值,

或者我只要其中一个就是ne_1.find_all('li')[2] 后面加一个数字,

列表取值大家应该都会把,这样就可以定位到我们想要的东西了。

总结一下find就是查找某一项的第一个数据,find_all就是找所有数据,然后用for遍历就能取出

到此这篇关于python 如何使用find和find_all爬虫、找文本的实现的文章就介绍到这了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的字符串对象有一个名为`find()`的方法,它可以用来查字符串中的指定子字符串,并返回到的位置。它的基本语法如下: ``` str.find(sub[, start[, end]]) ``` 其中,`str`是要查的字符串,`sub`是要查的子字符串。`start`和`end`是可选参数,用于指定查范围的起始和结束位置。如果到了子字符串,返回它在字符串中的下标;如果没有到,返回-1。 以下是一个使用`find()`方法的例子,它查字符串中第一次出现子字符串的位置: ```python str = "hello world" index = str.find("world") print(index) ``` 输出结果为:`6`,因为"world"子字符串在字符串中的位置是从下标6开始的。 另外,如果要查字符串中所有出现指定子字符串的位置,可以使用`find_all()`方法,它的语法如下: ```python str.find_all(sub[, start[, end]]) ``` 这个方法返回一个列表,列表中包含了所有到的子字符串的下标。以下是一个使用`find_all()`方法的例子: ```python str = "hello world" indexes = [i for i in range(len(str)) if str.startswith("l", i)] print(indexes) ``` 输出结果为:`[2, 3, 9]`,因为"l"子字符串在字符串中的位置是从下标2、3、9开始的。 在爬虫文本处理中,`find()`和`find_all()`方法经常被用来查指定的文本标签。例如,在使用BeautifulSoup库解析HTML文档时,可以使用`find_all()`方法查所有的指定标签,例如: ```python from bs4 import BeautifulSoup import requests url = "http://www.example.com" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") links = soup.find_all("a") for link in links: print(link.get("href")) ``` 这段代码会爬取指定的网页,然后使用BeautifulSoup库解析HTML文档,最后查所有的a标签,并打印它们的链接地址。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值