[Python] 两篇文章教你喝到美味的汤---BeautifulSoup4(上)

1644 0
无聊的小洛 2023-5-22 23:43:53 来自手机 | 显示全部楼层 |阅读模式
前言

我们都知道,在网络爬虫中,提取数据这一步是必不可少的,那么这样的话我们就要借用各种各样的解析库(正则狗都不用,能用解析库就不用正则),那么我就来讲一下我个人使用的最得心应手的解析库---BeautifulSoup4吧,我们可以简称它为bs4,由于我现在使用手机编写此文章,所以没有实例,望大家自己动手,丰衣足食(doge)。

用法

我们都知道,使用urllib.request库中的urlopen()方法可以轻易地向网站发送请求,就像这样

from urllib.request import *
from bs4 import *
url = "https://m.bilibili.com/"
html = urlopen(url)
print(html.read().decode("utf-8))

这样我们就可以爬取到B站的前端源码了,但是我们会发现,这样爬取到的代码混乱不堪,对强迫症极度不友好,这时候bs4就登场了(所有人都给我站一边,因为我bs4要出现),我们可以利用prettify()方法来整理这些代码,当然,要先用BeautifulSoup()方法来把我们爬取的结果转化为BeautifuSoup对象,解析器个人建议html.parser,朴实无华,不需要外部依赖,那么完整代码如下:

from urllib.request import *
from bs4 import *
url = "https://m.bilibili.com/" html = urlopen(url)
soup = BeautifulSoup(html,"html.parser")
print(soup.prettify())

可以看到,这样输出的代码可谓大快人心,非常的舒服,唉唉唉,你忘了我们用解析库干嘛的吗,提取数据啊喂,咳咳,回归正题,想要提取数据也非常简单,比如我们想要提取p节点,怎么办呢,只需要这样:

print(soup.p)

可以看到,这样我们就提取出了p节点,那如果我只想要里面的文本呢,那就这样:

print(soup.p.string)

或者

print(soup.p.get_text())

这样就可以了,那我如果像要div标签的class属性呢,那就这样:

print(soup.div.attrs("class"))

OK啊,这时候就有小伙伴问了,你这玩意,他也只能筛选出第一个啊,别的就不要了?唉唉唉,稍安勿躁,那么,接下来,让我们有请潘周聃…唉不是,串台了,咳咳,有请find_all()

方法和find()方法隆重出场,欢迎欢迎,热烈欢迎(此处添加鼓掌特效)

有了find_all(),我们提取的节点就是所有符合条件的了,但我们需要用一个for循环迭代出来,如下所示,提取所有p标签:

result_list = []
result = soup.find_all("p")
for I in result:
  result_list.append(i)
print(result_list)

那如果我要提取所有class属性为"xiaoluo"的节点呢,那就这样:

result_list = []
result = soup.find_all(class = "xiaoluo")
for I in result:
  result_list.append(i)

print(result_list)

当然,我们还可以添加更多的属性,但是要以字典的形式,就像这样:

result_list = []
result = soup.find_all("",{"class":"xiaoluo","id":"xiaoluo"})
for I in result:
  result_list.append(i) print(result_list)

留出空格是为了避免它把我们传入的字典当做节点参数,那么我们今天就到这了,不说了,我妈催我睡觉了(苦逼的我)再见了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

无聊的小洛

初入联盟

关注
  • 4
    主题
  • 0
    粉丝
  • 0
    关注
我姓洛,初二,学了两年半编程(没玩梗,真的两年半),主修Python网络爬虫,前端;PHP,Java正在学

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行