网站首页 > 文章精选 正文
一、前言
前面几篇解析了如何使用requests模块向网站发送http请求,获取到网页的HTML数据。这篇我们来如何使用BeautifulSoup模块来从HTML文本中提取我们想要的数据。
ps:文末有重要福利!
二、定义
- Beautiful Soup,简称bs4,是Python的一个HTML或XML的解析库,一般用它来从网页中提取数据。
三、安装
pip install bs4
四、应用场景
- 在爬虫应用中,发起请求获得响应后,如果响应的内容是个html代码,并且html代码里有我们需要的数据,可以使用BeautifulSoup提取数据。
- 例如请求新浪热搜网址,返回热搜列表html代码。这是我们可以用BeautifulSoup提取标题列表、点击量列表等。
五、用法
from bs4 import BeautifulSoup
demo_html = "<html>" \
"<head>" \
"<title>code_space</title>" \
"</head>" \
"<body>" \
"<a class='code_space'>Hello World</a>" \
"</body><html>"
html_obj = BeautifulSoup(demo_html, 'html.parser', from_encoding='utf-8')
# 打印美化后到的html代码
print(html_obj.prettify())
# 打印html的title
print(html_obj.title.string)
# 获取指定标签里面的信息
print(html_obj.select(".code_space")[0].get_text())
六、测试demo
- 接下来我们根据前面几篇讲到的request发起GET请求的步骤,封装请求头,模拟请求“简书”官网的链接,采集我们要的信息。
# -*- coding: utf-8 -*-
"""
@Time : 2022/1/20 14:40
@Auth : 技术空间
@File :news_spider_demo.py
@IDE :PyCharm
@Motto:技术总是要日积月累的
"""
import requests
from bs4 import BeautifulSoup
if __name__ == '__main__':
# 简书链接
url = "https://www.jianshu.com/"
cookie = "token=code_space;"
# 封装请求头
header = {
"Cookie": cookie,
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Connection": "keep-alive",
"Content-Type": "application/json",
"Host": "www.jianshu.com",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
}
# 发起简书首页的请求
r2 = requests.get(url, headers=header, allow_redirects=False)
# 获取返回的响应的text
baidu_html = r2.text
# 将返回的html代码处理成BeautifulSoup对象
html_obj = BeautifulSoup(baidu_html, 'html.parser', from_encoding='utf-8')
# 利用BeautifulSoup获取指定标签里面的信息
title_set = html_obj.select("a.title")
title_list = []
for title in title_set:
print("标签信息-->")
print(title)
title_list.append(title.get_text())
# 结合上篇文章提到的for循环快速打印序列内容的写法
print("收集到的标题有:")
print('\n--------------------\n'.join(n for n in title_list))
七、相关知识点
- requests的请求知识点可以回顾往期文章:
- for循环应用场景知识点可以回顾往期文章:
八、* 重要拓展 *
到这篇文章我们已经掌握了利用requests库进行爬虫采集数据的核心基础,接下来我会带大家开始写一个系统性的爬虫,以URL管理器、网页下载器、网页解析器形成一个基本的爬虫架构。此架构通用性强,上手快,业务分层清晰。
架构图如下:
还请大家持续关注,接下来几天我会抽出时间解析这部分内容,保证你快速上手,并且收获良多。
关注我,坚持每日积累一个技巧,长期坚持,我们将会不断进步。
猜你喜欢
- 2024-12-23 python网络爬虫:批量爬取图片 python批量爬取图片并保存
- 2024-12-23 10w qps缓存数据库——Redis redis缓存数据量多大开始性能下降
- 2024-12-23 Python File(文件) 常用场景 python中file.write
- 2024-12-23 「JS 逆向百例」某网站加速乐 Cookie 混淆逆向详解
- 2024-12-23 「JS 逆向百例」猿人学web比赛第五题:js 混淆 - 乱码增强,详细剖析
- 2024-12-23 Python 操作mysql实现事务处理 python+操作mysql实现事务处理功能
- 2024-12-23 python 大量乱序文件如何合并成有序的
- 2024-12-23 如何使用 PyScript 在 Web 浏览器上轻松运行
- 2024-12-23 Selenium4.0+Python3系列(四) - 常见元素操作(含鼠标键盘事件)
- 2024-12-23 Selenium4+Python3系列(六) - 强制等待、隐式等待、显式等待
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)