如何用Python提取并格式化网页爬取的ACC的PCR数据?
实现方法
1. 调整爬取逻辑,定位目标数据所在的表格
目标数据(日期、ACC交易价格、PCR值)以表格形式展示,无需遍历所有<p>标签,直接定位页面中的数据表格即可。
2. 完整代码实现
import requests from bs4 import BeautifulSoup # 目标页面URL url = "https://niftyinvest.com/put-call-ratio/ACC" # 模拟浏览器请求头,避免被拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } try: # 发送请求并获取页面内容 response = requests.get(url, headers=headers) response.raise_for_status() # 捕获请求异常 soup = BeautifulSoup(response.text, "html.parser") # 定位到包含PCR数据的表格(根据页面实际结构调整class属性) pcr_table = soup.find("table", class_="table table-bordered") if not pcr_table: print("未找到目标数据表格,请检查页面结构是否更新") else: # 遍历数据行,跳过表头 records = [] for row in pcr_table.find_all("tr")[1:]: cells = row.find_all("td") if len(cells) >= 3: # 根据页面实际列顺序提取字段,此处假设第1列是日期,第2列是ACC价格,第3列是PCR date = cells[0].get_text(strip=True) acc_price = cells[1].get_text(strip=True) pcr_value = cells[2].get_text(strip=True) records.append({"日期": date, "ACC交易价格": acc_price, "PCR值": pcr_value}) # 输出规整的Markdown表格 print("| 日期 | ACC交易价格 | PCR值 |") print("|------|-------------|-------|") for record in records: print(f"| {record['日期']} | {record['ACC交易价格']} | {record['PCR值']} |") except requests.exceptions.RequestException as e: print(f"请求出错: {e}")
3. 关键说明
- 页面结构适配:如果运行时找不到表格,需打开目标页面,通过浏览器开发者工具查看表格的实际
class或id属性,替换代码中对应的定位参数。 - 字段顺序调整:若提取的字段与实际不符,检查表格列的顺序,修改
cells的索引值(例如cells[0]对应第一列,依此类推)。 - 异常处理:代码中加入了请求异常捕获,避免因网络问题或页面访问限制导致程序崩溃。
内容的提问来源于stack exchange,提问作者Brijesh
相关产品推荐
相关产品推荐

