linux运维

python爬虫-14-python获取数据之Beautiful

2022-05-30  本文已影响0人  运维家

这里我们主要梳理下思路,整理下和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下开发软件。

上一篇下一篇

猜你喜欢

热点阅读