如何将BeautifulSoup爬取的网页数据存入DataFrame并保存
爬取结果存入DataFrame及持久化保存方案
前置准备
你需要额外安装pandas库用于DataFrame操作,执行以下安装命令:pip install pandas requests beautifulsoup4
如果需要保存为Excel格式,额外安装openpyxl依赖:pip install openpyxl
具体实现代码
你的现有代码已经完成了页面内容和字段提取,只需要将提取到的字段结构化后传入pandas生成DataFrame,再调用对应保存方法即可。考虑到单页面爬取是单条数据,以及避免标签缺失导致的报错,修改后完整代码如下:
import requests from bs4 import BeautifulSoup import pandas as pd url = "https://aedownload.com/download-magazine-promo-for-element-3d-free-videohive/" page = requests.get(url) page.encoding = page.apparent_encoding # 自动识别页面编码,避免乱码 soup = BeautifulSoup(page.content, "html.parser") # 提取字段时增加非空判断,避免标签不存在时报错 title = soup.find(class_="blog-title").text.strip() if soup.find(class_="blog-title") else "" project_details = soup.find(class_="project-details").text.strip() if soup.find(class_="project-details") else "" link_wp = soup.find(class_="wp-video-shortcode").text.strip() if soup.find(class_="wp-video-shortcode") else "" link_infopage = soup.find(class_="infopage112").text.strip() if soup.find(class_="infopage112") else "" project_description = soup.find(class_="Project-discription").text.strip() if soup.find(class_="Project-discription") else "" # 将字段整理为字典格式,单条数据的值需要包裹为列表,传入后生成单行列的DataFrame data = { "标题": [title], "项目详情": [project_details], "WP视频链接": [link_wp], "信息页链接": [link_infopage], "项目描述": [project_description] } df = pd.DataFrame(data) # 保存为CSV格式,指定utf-8-sig编码避免Windows下Excel打开乱码,index=False不保存行索引 df.to_csv("ae资源爬取结果.csv", index=False, encoding="utf-8-sig") # 如果需要保存为Excel格式,取消注释下面这行即可 # df.to_excel("ae资源爬取结果.xlsx", index=False) # 打印验证结果 print(df)
多页面爬取扩展
如果后续需要爬取多个同类型页面,不要每爬一页就存一次文件,效率更低。可以按以下逻辑调整:
- 爬取前先初始化一个空列表
all_data = [] - 每爬完一个页面,将提取到的字段整理为不带列表包裹的字典,直接append到
all_data中 - 所有页面爬取完成后,直接执行
df = pd.DataFrame(all_data)即可一次性生成包含所有爬取结果的DataFrame,再统一保存
注意事项
- 爬取时建议在请求之间加入1-3秒的随机延时,避免请求频率过高被目标站点封禁IP
- 部分页面可能存在反爬机制,可以在requests.get中传入headers参数模拟浏览器请求,提升爬取成功率
- 提取字段时的非空判断不要省略,站点小幅改版就可能导致某个class名变动,直接让程序中断
内容的提问来源于stack exchange,提问作者Zubair Tariq
相关产品推荐
相关产品推荐

