使用BeautifulSoup提取<h1>标签文本失败,请求解决方法及表格提取保存指导
使用BeautifulSoup提取
标签文本失败,请求解决方法及表格提取保存指导
嘿,我来帮你排查下h1文本提取失败的问题,顺便给你讲讲怎么提取保存表格~
关于
文本提取失败的可能原因及解决办法
咱们一步步来排查问题:
- 检查请求是否被网站拦截
有些网站会识别非浏览器发起的请求,返回空内容或错误页面。你可以给请求加个浏览器模拟头试试:
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } response = requests.get(url, headers=headers)
同时打印response.status_code确认是否为200,只有200才代表请求成功哦。
- 确认标签的实际位置
有时候咱们预想的页面结构和实际不符,比如h1可能不在div#main里。你可以先全局查找h1标签试试:
h1_tag = soup.find('h1') if h1_tag: print(f"h1文本内容: {h1_tag.get_text(strip=True)}") else: print("全局都没找到h1标签!")
如果全局能找到,那就说明之前定位div#main的思路不对,得调整元素定位方式。
- 换个解析器试试
Python自带的html.parser对复杂页面的解析偶尔会出问题,你可以换成lxml(先通过pip install lxml安装):
soup = BeautifulSoup(response.content, 'lxml')
关于提取并保存表格的方法
目标页面的表格数据,咱们有两种简单的保存方式:
方法一:用Python自带的csv模块
import csv # 找到页面中的表格(如果有多个表格,可通过find_all筛选) table = soup.find('table') if table: # 提取表头 headers = [th.get_text(strip=True) for th in table.find('tr').find_all('th')] # 提取表格内容行 rows = [] for tr in table.find_all('tr')[1:]: # 跳过表头行 row_data = [td.get_text(strip=True) for td in tr.find_all('td')] rows.append(row_data) # 保存为CSV文件 with open('elo_ratings_1999.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(headers) writer.writerows(rows) print("表格已成功保存为elo_ratings_1999.csv") else: print("未找到目标表格!")
方法二:用pandas(更便捷,适合后续数据处理)
先安装pandas:pip install pandas,然后运行以下代码:
import pandas as pd # 直接读取页面中的所有表格,返回表格列表 tables = pd.read_html(url, headers=0, attrs={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'}) # 假设第一个表格是目标表格(可打印tables查看具体内容) df = tables[0] # 保存为CSV df.to_csv('elo_ratings_1999.csv', index=False, encoding='utf-8') print("表格已成功保存!")
备注:内容来源于stack exchange,提问作者Joshua Oehmen
相关产品推荐
相关产品推荐

