当前位置: 首页 > news >正文

掌握Python爬虫中的BeautifulSoup4:从环境搭建到实战演示

🔸 环境搭建

首先,我们需要安装BeautifulSoup4和requests库。在命令行中运行以下命令:

pip install beautifulsoup4 requests

🔹 这些库将帮助我们发送HTTP请求并解析HTML文档,为我们的爬虫工作打下坚实的基础。


🔸 bs4节点选择器

BeautifulSoup4提供了多种方式来选择HTML节点,其中最常用的是findfind_all方法。

import requests
from bs4 import BeautifulSoup# 发送HTTP请求获取网页内容
url = 'http://example.com'
response = requests.get(url)
html_content = response.content# 解析HTML文档
soup = BeautifulSoup(html_content, 'html.parser')# 使用find方法选择节点
title = soup.find('h1').text
print(f"Title: {title}")# 使用find_all方法选择节点
paragraphs = soup.find_all('p')
for p in paragraphs:print(p.text)

🔹 在这个示例中,我们使用find方法选择第一个<h1>节点,使用find_all方法选择所有<p>节点。


🔸 bs4属性选择器

通过BeautifulSoup4,我们可以使用属性选择器来选择带有特定属性的节点。例如,选择所有具有特定classid属性的节点。

import requests
from bs4 import BeautifulSoup# 发送HTTP请求获取网页内容
url = 'http://example.com'
response = requests.get(url)
html_content = response.content# 解析HTML文档
soup = BeautifulSoup(html_content, 'html.parser')# 使用属性选择器选择节点
content_div = soup.find('div', class_='content')
print(f"Content: {content_div.text}")# 选择特定id的节点
header = soup.find(id='header')
print(f"Header: {header.text}")

🔹 在这个示例中,我们使用属性选择器选择class属性值为content<div>节点和id属性值为header的节点。


🔸 bs4层级选择器

BeautifulSoup4还提供了层级选择器,可以选择某个节点的子节点、父节点和兄弟节点等。

import requests
from bs4 import BeautifulSoup# 发送HTTP请求获取网页内容
url = 'http://example.com'
response = requests.get(url)
html_content = response.content# 解析HTML文档
soup = BeautifulSoup(html_content, 'html.parser')# 选择子节点
content_div = soup.find('div', class_='content')
all_links = content_div.find_all('a')
for link in all_links:print(f"Link: {link['href']}")# 选择父节点
footer = soup.find('div', id='footer')
parent = footer.parent
print(f"Footer's parent tag: {parent.name}")# 选择兄弟节点
sibling = footer.find_next_sibling()
print(f"Footer's next sibling tag: {sibling.name}")

🔹 在这个示例中,我们选择了<div>节点的所有子节点<a>,选择了<div>节点的父节点,并选择了<div>节点的下一个兄弟节点。


🔸 实战演示

让我们结合以上知识,进行一个实际的爬虫示例,爬取并解析一个网页中的标题、段落和链接。

import requests
from bs4 import BeautifulSoup# 发送HTTP请求获取网页内容
url = 'https://example.com/article'
response = requests.get(url)
html_content = response.content# 解析HTML文档
soup = BeautifulSoup(html_content, 'html.parser')# 使用节点选择器提取标题
title = soup.find('h1').text
print(f"Title: {title}")# 使用属性选择器提取作者
author = soup.find('span', class_='author').text
print(f"Author: {author}")# 使用层级选择器提取文章内容
content_div = soup.find('div', class_='article-content')
paragraphs = content_div.find_all('p')
for p in paragraphs:print(p.text)# 提取文章中的所有链接
links = content_div.find_all('a')
for link in links:print(f"Link: {link['href']}")

🔹 在这个示例中,我们爬取一个文章页面,通过节点选择器提取标题,通过属性选择器提取作者,通过层级选择器提取文章内容和所有链接,并打印结果。


🔸 总结

🔹 通过这次学习,我们掌握了如何使用BeautifulSoup4进行节点选择、属性选择和层级选择,并结合实际爬虫示例展示了如何提取网页中的关键信息。掌握这些技巧,能够帮助我们在开发爬虫时更加高效、精准地提取网页中的数据。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • conda操作总结
  • 【数据湖与数据仓库】数据湖与数据仓库的区别与应用
  • flutter 使用正则表达式进行日期、时间格式化
  • ETL工程师角度下的SQL优化
  • 【C++11】解锁C++11新纪元:深入探索Lambda表达式的奥秘
  • Unity强化工程 之 音效
  • SAP-PLM创建物料主数据接口
  • JavaScript和vue实现左右两栏,中间拖动按钮可以拖动左右两边的宽度
  • 全排列的 Java 实现
  • Springcloud-Nacos
  • OpenStack入门体验
  • 掩码、反掩码、通配符的区别和计算方式
  • 使用s3cmd 2.x 与 Cyberduck 管理在 DigitalOcean Spaces 对象存储中的数据
  • 全网最适合入门的面向对象编程教程:30 Python的内置数据类型-object根类
  • 缓存策略自定义:Laravel应用性能优化秘籍
  • [Vue CLI 3] 配置解析之 css.extract
  • 2017前端实习生面试总结
  • Angular2开发踩坑系列-生产环境编译
  • bearychat的java client
  • JAVA SE 6 GC调优笔记
  • java取消线程实例
  • MySQL QA
  • npx命令介绍
  • React16时代,该用什么姿势写 React ?
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Spring核心 Bean的高级装配
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 大数据与云计算学习:数据分析(二)
  • 电商搜索引擎的架构设计和性能优化
  • 分享一份非常强势的Android面试题
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 扑朔迷离的属性和特性【彻底弄清】
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 数据仓库的几种建模方法
  • 算法之不定期更新(一)(2018-04-12)
  • 一个完整Java Web项目背后的密码
  • ​ssh免密码登录设置及问题总结
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • # Redis 入门到精通(九)-- 主从复制(1)
  • #传输# #传输数据判断#
  • $.each()与$(selector).each()
  • (function(){})()的分步解析
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (二)pulsar安装在独立的docker中,python测试
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (原)本想说脏话,奈何已放下
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 依赖注入和配置系统
  • .NET的数据绑定