
本教程详细介绍了如何使用python的`requests`、`beautifulsoup`和`pandas`库,从网页中抓取结构化数据,并将其按行解析成清晰的字段(如章节标题、节号和节内容)。文章将指导读者如何利用css选择器精准定位目标元素,并通过迭代和数据重构,最终将抓取到的数据高效地导出为结构化的pandas dataframe,以便进一步分析或保存为csv文件。
在进行网络数据抓取(Web Scraping)时,一个常见的挑战是将从网页上获取的原始文本内容,按照其内在的逻辑结构进行拆分和整理,最终以结构化的形式(例如,按行、按字段)存储起来。本教程将以抓取在线圣经章节为例,演示如何利用Py
thon的requests库获取网页内容,BeautifulSoup库解析HTML,以及pandas库进行数据结构化和导出。
首先,确保您已安装所需的Python库:requests用于发送HTTP请求,BeautifulSoup用于解析HTML,pandas用于数据处理。
import requests from bs4 import BeautifulSoup import pandas as pd import time # 用于添加请求延迟,避免对网站造成过大压力
为了模拟浏览器访问,我们需要设置User-Agent请求头。然后定义一个函数来获取指定URL的HTML内容。
# 配置请求头,模拟浏览器访问
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}
# 定义获取网页内容的函数
def get_html_content(url):
try:
r = requests.get(url, headers=headers)
r.raise_for_status() # 检查HTTP请求是否成功
return r.text
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
return None
# 目标URL
target_url = "https://www.bibliaonline.com.br/ara/mt/1"
html_content = get_html_content(target_url)
if html_content:
# 使用BeautifulSoup解析HTML内容
soup = BeautifulSoup(html_content, 'html.parser')
else:
print("未能获取网页内容,程序退出。")
exit()这是本教程的核心部分。原始代码尝试获取整个div.verseByVerse,然后在其内部寻找span.bv、span.v和span.t。这种方法的问题在于,find或find_all在循环外部调用时,会获取页面上的第一个匹配项,而不是当前迭代元素内部的匹配项。此外,对整个div.verseByVerse进行get_text()会将其所有子元素的文本拼接在一起,无法实现逐行导出。
正确的做法是,首先定位到每个独立的经文文本(span.t),然后利用其相对位置查找对应的经文编号(span.v)和章节标题(div.bv)。
通过分析目标网页的HTML结构,我们可以观察到:
iSlide PPT
DeepSeek AI加持,输入主题生成专业PPT,支持Word/PDF等45种文档导入,职场汇报、教学提案轻松搞定
375
查看详情
标签之前。
我们可以使用CSS选择器div.verseByVerse p span.t来精确选择所有经文文本元素。然后,在遍历这些元素时,使用find_previous()方法来查找其前一个兄弟元素或祖先元素,以获取经文编号和章节标题。
# 使用CSS选择器定位所有经文文本(span.t)
# 这些span.t通常位于p标签内,p标签又位于div.verseByVerse内
verse_text_elements = soup.select('div.verseByVerse p span.t')
# 用于存储提取到的数据
data = []
current_chapter_title = ""
for verse_element in verse_text_elements:
# 查找最近的、前一个的div元素作为章节标题
# 注意:这里需要考虑标题可能只出现一次,然后适用于其后的多节经文
# 因此,我们应该找到最近的div.bv,并更新current_chapter_title
previous_div = verse_element.find_previous('div', class_="bv")
if previous_div:
current_chapter_title = previous_div.get_text(strip=True)
# 查找最近的、前一个的span元素作为经文编号
verse_number_element = verse_element.find_previous('span', class_="v")
verse_number = verse_number_element.get_text(strip=True) if verse_number_element else ""
verse_content = verse_element.get_text(strip=True)
data.append({
'章节标题': current_chapter_title,
'经文编号': verse_number,
'经文内容': verse_content
})
# 打印部分提取结果,以便检查
# for item in data[:5]:
# print(item)关键点解释:
将提取到的数据列表转换为Pandas DataFrame,然后可以方便地导出为CSV文件。
# 将数据转换为Pandas DataFrame
df = pd.DataFrame(data)
# 打印DataFrame的前几行
print("DataFrame预览:")
print(df.head())
# 添加延迟,避免短时间内大量请求
time.sleep(1)
# 将数据导出到CSV文件
# index=False表示不将DataFrame的索引写入CSV文件
output_filename = 'biblia_mateus_cap1.csv'
df.to_csv(output_filename, index=False, encoding='utf-8-sig') # 使用'utf-8-sig'处理中文编码问题
print(f"\n数据已成功导出到 {output_filename}")import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
# 配置请求头,模拟浏览器访问
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}
# 定义获取网页内容的函数
def get_html_content(url):
try:
r = requests.get(url, headers=headers)
r.raise_for_status() # 检查HTTP请求是否成功
return r.text
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
return None
# 目标URL
target_url = "https://www.bibliaonline.com.br/ara/mt/1"
print(f"正在获取网页内容: {target_url}")
html_content = get_html_content(target_url)
if html_content:
# 使用BeautifulSoup解析HTML内容
soup = BeautifulSoup(html_content, 'html.parser')
# 使用CSS选择器定位所有经文文本(span.t)
verse_text_elements = soup.select('div.verseByVerse p span.t')
# 用于存储提取到的数据
data = []
current_chapter_title = "" # 用于存储当前章节标题,因为标题可能只出现一次
print("开始解析经文数据...")
for verse_element in verse_text_elements:
# 查找最近的、前一个的div元素作为章节标题
# 如果找到新的章节标题,则更新current_chapter_title
previous_div = verse_element.find_previous('div', class_="bv")
if previous_div:
current_chapter_title = previous_div.get_text(strip=True)
# 查找最近的、前一个的span元素作为经文编号
verse_number_element = verse_element.find_previous('span', class_="v")
verse_number = verse_number_element.get_text(strip=True) if verse_number_element else ""
verse_content = verse_element.get_text(strip=True)
data.append({
'章节标题': current_chapter_title,
'经文编号': verse_number,
'经文内容': verse_content
})
# 将数据转换为Pandas DataFrame
df = pd.DataFrame(data)
# 打印DataFrame的前几行
print("\nDataFrame预览:")
print(df.head())
# 添加延迟,避免短时间内大量请求
time.sleep(1)
# 将数据导出到CSV文件
output_filename = 'biblia_mateus_cap1.csv'
df.to_csv(output_filename, index=False, encoding='utf-8-sig') # 使用'utf-8-sig'处理中文编码问题
print(f"\n数据已成功导出到 {output_filename}")
else:
print("未能获取网页内容,程序退出。")通过本教程,您应该已经掌握了如何利用Python和相关库,高效地从复杂网页中提取结构化数据,并将其整理成易于分析和存储的格式。这种方法不仅适用于圣经章节,也可以推广到其他需要逐行解析和结构化处理的网页抓取任务中。
以上就是Python与Pandas:网页内容逐行解析与结构化导出教程的详细内容,更多请关注其它相关文章!
# 福州seo观网信息科技
# 转换为
# 如何使用
# 导出到
# 第一个
# 重构
# 适用于
# 优秀网站栏目建设
# 西宁抖音seo搜索优化
# 您的
# 有效的seo报价
# 个人博客网站建设定制
# 烟台海外网站建设
# 兴安盟网络营销的推广
# 网站建设题
# 公司怎么自制网站推广平台
# 烟台网站推广微訫hfqjwl下拉推广
# css
# 数据结构
# 选择器
# 结构化
# ap
# win
# ai
# csv
# safari
# app
# 浏览器
# 编码
# 网络爬虫
# windows
# html
# python
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
Flexbox布局:实现粘性导航与底部页脚的完美结合
win11自带录屏文件保存在哪里 Win11 Game Bar录制视频默认路径【分享】
Safari浏览器自动填表功能失效怎么办 Safari表单管理修复
《360浏览器》自动保存账号密码设置方法
《兴业银行》注册登录方法
Keras中Convolution2D层及其核心辅助层详解
Eclipse开发J*a快速入门
diskgenius分区工具如何设置Bios启动项
iphone16系列配置参数介绍
空腹吃苹果好吗 苹果空腹摄入指南
126手机126邮箱登录_126邮箱手机登录入口官网
《广发易淘金》国债逆回购操作教程
《新三国志曹操传》游历事件袁尚突围攻略
AO3永久镜像入口开放_AO3最新网址兼容所有浏览器
j*a中ArrayBlockingQueue的使用
vivo浏览器怎么离线保存网页 vivo浏览器下载完整页面以便无网络时阅读
Go Template中优雅处理循环最后一项:自定义函数实践
免费占卜在线神算_免费占卜手机神算
Symfony路由参数转换器:实体存在性验证与错误处理策略
奥克斯空调不制热啥毛病_奥克斯空调不制热原因分析及解决技巧
J*a里如何处理ArithmeticException并防止除零_算术异常防护策略解析
手机自动关机是怎么回事?如何修复?手机异常关机的原因排查与修复技巧
使用jQuery精确检测除指定元素外任意位置的点击事件
POKI小游戏在线免费入口链接 POKI小游戏无下载秒玩玩
抖音视频如何添加标题?添加标题有哪些好处?
如何编写一个符合 composer 规范的 post-install-cmd 脚本?
J*aScript字符串_Unicode处理
解决Flex容器横向滚动内容截断与偏移问题
J*aScript桌面应用_Electron多进程架构实战
多多买菜门店端app订单查看方法
使用Google服务账号实现Google Drive API无缝集成与文件访问
智学网成绩单查询系统网_智学网学生平台登录
4399小游戏下装链接 4399小游戏下载链接入口
J*aScript与HTML元素交互:图片点击事件与链接处理教程
使用Selenium在无头Chrome中交互动态菜单和复选框的策略
不吃碳水化合物是健康减肥的好办法吗
电脑的“恢复环境(WinRE)”找不到怎么办_Windows系统恢复环境重建【高级修复】
如何用mysql开发用户注册登录功能_mysql用户注册登录数据库设计
百度网盘网页入口链接分享 百度网盘官网入口网页登录
QQ邮箱手机版网页版 QQ邮箱登录入口地址
sf漫画官网登录入口直达_sf漫画官方正版网址
苹果自助维修计划支持哪些设备机型
PHP页面重载时变量值不重置的实现方法
pubmed数据库官方主页_pubmed学术论文查找官网直达
Excel如何快速合并单元格内容_Excel文本合并与函数操作技巧
Lar*el Eloquent:高效删除多对多关系中无关联子记录的父模型
歌词怎么展示在|直播|间视频号?有什么注意事项?
J*aScript模块加载器_RequireJS原理分析
在VS Code中进行数据科学和机器学习开发
《华夏千秋》龙女试炼功法获取方法
2025-11-18
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。