如何用Pandas抓取包含href链接的多个表格?
解决方案:同时获取表格数据与href链接
pd.read_html仅提取单元格文本,不会保留HTML属性,因此需要结合requests和BeautifulSoup手动解析页面,提取每个单元格的文本及对应链接,再构建DataFrame。
实现代码
import requests from bs4 import BeautifulSoup import pandas as pd # 初始化存储数据的列表 all_rows = [] base_url = 'https://www.screener.in/screens/881782/rk-all-stocks/?page={}' # 遍历目标页面 for page_num in range(1, 10): # 发送HTTP请求获取页面内容 response = requests.get(base_url.format(page_num)) response.raise_for_status() # 捕获请求错误 # 解析HTML页面 soup = BeautifulSoup(response.text, 'html.parser') # 定位目标表格(通过class筛选,适配目标网站的表格结构) target_table = soup.find('table', class_='data-table') if not target_table: continue # 提取表头 headers = [th.get_text(strip=True) for th in target_table.find('thead').find_all('th')] # 遍历表格行数据 for row in target_table.find('tbody').find_all('tr'): row_data = {} cells = row.find_all('td') for idx, cell in enumerate(cells): current_header = headers[idx] # 提取单元格文本 cell_text = cell.get_text(strip=True) # 查找单元格内的链接 link_tag = cell.find('a') if link_tag and 'href' in link_tag.attrs: # 拼接完整链接(目标网站的href是相对路径) full_link = f"https://www.screener.in{link_tag['href']}" # 同时存储文本和对应链接(链接单独作为一列) row_data[current_header] = cell_text row_data[f"{current_header} 链接"] = full_link else: # 无链接的单元格仅存储文本 row_data[current_header] = cell_text all_rows.append(row_data) # 转换为DataFrame并保存 final_df = pd.DataFrame(all_rows) final_df.to_csv('带链接的股票数据.csv', index=False, encoding='utf-8-sig')
关键说明
- 页面解析逻辑:通过
BeautifulSoup定位表格,遍历每一行和单元格,判断是否存在<a>标签,若存在则提取href属性并拼接成完整链接。 - 数据存储方式:将链接作为对应文本列的补充列(如“股票名称”对应“股票名称 链接”),确保CSV中同时保留可读文本和原始链接。
- 异常处理:加入
response.raise_for_status()捕获请求失败的情况,避免因页面加载错误导致程序中断。
内容的提问来源于stack exchange,提问作者RK Solanki
相关产品推荐
相关产品推荐

