这里我们主要梳理下思路,整理下和
BeautifulSoup
有关的内容。
1、find和find_all
相同点
在提取数据的时候,第一个参数是标签的名字,如果后面还想有其他参数作为过滤的方式而存在,可以通过关键字的形式来传输,比如'class_'=red
,如果你的关键字不是python
关键字的话,后面是不可以添加下划线的,否则会无法筛选出来准确数据。
亦或者通过attrs
属性,可以将你想要用来过滤的相关内容添加进来,他是一个字典的形式;
不同点
find
:不管你这个文件中有多少个匹配的内容,他只返回第一个匹配到的内容,一旦匹配到,这个就结束了;
find_all
:匹配符合条件的所有数据并以列表的形式返回;
2、获取标签的属性
(2.1)通过下标获取
Jier = a['href']
(2.2)通过attrs
属性
Jier = a.attrs['href']
3、string、strings、stripped_strings、get_text方法
(3.1)string
方法
获取指定标签下的非标签字符串,返回来的是一个字符串,如果该标签下有多个非标签字符串,就无法获取到了;
可以看下,下面这个示例是只有一个非标签字符串:
Html = """
<table class="tablelist" cellpadding="0" cellspacing="0">
<tbody>
<tr class="h">
<td class="l" width="374">职位名称</td>
<td>职位类别</td>
<td>人数</td>
<td>地点</td>
<td>发布时间</td>
</tr>
</tbody>
</table>"""
from bs4 import BeautifulSoup
Jier = BeautifulSoup(Html, 'lxml')
Suner = Jier.find('td')
print(Suner.string)
运行结果如下:
职位名称
我们成功获取到了第一个td
标签下的非标签字符串;
下面我们试着在第一个td
标签中,再添加一个非标签字符串,看看是否可以获取到呢;
Html = """
<table class="tablelist" cellpadding="0" cellspacing="0">
<tbody>
<tr class="h">
<td class="l" width="374">职位名称<p>你好</p></td>
<td>职位类别</td>
<td>人数</td>
<td>地点</td>
<td>发布时间</td>
</tr>
</tbody>
</table>"""
from bs4 import BeautifulSoup
Jier = BeautifulSoup(Html, 'lxml')
Suner = Jier.find('td')
print(Suner.string)
运行结果如下:
None
可以看到我们获取了一个空值。
(3.2)strings
方法
获取某个标签下的所有子孙非标签字符串,返回来的是一个生成器;
如下:
Html = """
<table class="tablelist" cellpadding="0" cellspacing="0">
<tbody>
<tr class="h">
<td class="l" width="374">职位名称<p>你好</p></td>
<td>职位类别</td>
<td>人数</td>
<td>地点</td>
<td>发布时间</td>
</tr>
</tbody>
</table>"""
from bs4 import BeautifulSoup
Jier = BeautifulSoup(Html, 'lxml')
Suner = Jier.find('td')
Strs = list(Suner.strings)
print(Strs)
输出结果如下:
['职位名称', '你好']
或者有同学想获取所有的非标签字符串,如下:
Html = """
<table class="tablelist" cellpadding="0" cellspacing="0">
<tbody>
<tr class="h">
<td class="l" width="374">职位名称<p>你好</p></td>
<td>职位类别</td>
<td>人数</td>
<td>地点</td>
<td>发布时间</td>
</tr>
</tbody>
</table>"""
from bs4 import BeautifulSoup
Jier = BeautifulSoup(Html, 'lxml')
Suner = Jier.find('tr')
Strs = list(Suner.strings)
print(Strs)
运行结果如下:
['\n', '职位名称', '你好', '\n', '职位类别', '\n', '人数', '\n', '地点', '\n', '发布时间', '\n']
可以看到结果中有很多空字符串'\n'
,那么如何避免有这个空字符串呢,那就轮到我们的stripped_strings
方法了;
(3.3)stripped_strings
方法
获取某个标签下的所有子孙非标签字符串,并自动去掉空值,返回来的是一个生成器;
如下:
Html = """
<table class="tablelist" cellpadding="0" cellspacing="0">
<tbody>
<tr class="h">
<td class="l" width="374">职位名称<p>你好</p></td>
<td>职位类别</td>
<td>人数</td>
<td>地点</td>
<td>发布时间</td>
</tr>
</tbody>
</table>"""
from bs4 import BeautifulSoup
Jier = BeautifulSoup(Html, 'lxml')
Suner = Jier.find('tr')
Strs = list(Suner.stripped_strings)
print(Strs)
运行结果如下:
['职位名称', '你好', '职位类别', '人数', '地点', '发布时间']
(4)get_text
方法
获取某个标签下的所有子孙非标签字符串,并以字符串的形式返回,且可以指定字符串连接;
如果不指定字符串;
剩余内容请转至VX公众号 “运维家” ,回复 “176” 查看。
------ “运维家” ,回复 “176” ------
------ “运维家” ,回复 “176” ------
------ “运维家” ,回复 “176” ------
在Linux中的命令,linux实时线程,linux中tail,如何调用linux的epoll,linux无故多出很多进程,linux怎么打开xls文件,linux怎样用命令打开软件,程序员要不要装linux系统,LINUX通用链表实例;
usb无法安装linux,类似安卓linux,在linux中压缩解压命令,512老电脑linux,linux中退出根目录,linux自定义自启的脚本,linux管理员用户名是,新装的linux网卡配置,linux修改u盘权限失败,c语言linux下开发软件。
网友评论