从指定网页提取表格生成DataFrame:BeautifulSoup查找无结果问题
解决方法
首先要明确:tab3是<div>的ID,不是表格的ID。你需要先定位到这个div容器,再从它内部提取表格。下面是修正后的完整代码:
import requests from bs4 import BeautifulSoup import pandas as pd # 模拟浏览器请求,避免被网站拦截 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' } # 获取网页内容 url = "http://pitzavod.ru/products/upakovka/" response = requests.get(url, headers=headers) response.encoding = 'utf-8' # 确保编码正确,避免俄语内容乱码 # 解析HTML soup = BeautifulSoup(response.text, 'html.parser') # 先定位到id为tab3的div容器 tab3_div = soup.find('div', id='tab3') # 从div容器内提取表格 if tab3_div: table = tab3_div.find('table') if table: # 用pandas将表格转换为DataFrame df = pd.read_html(str(table))[0] print(df) else: print("tab3容器内未找到表格元素") else: print("未找到id为tab3的div容器")
关键细节说明:
- 元素层级逻辑:目标表格嵌套在
tab3的div里,不是直接拥有tab3这个ID,必须先定位div再找表格。 - 请求头设置:很多网站会拦截无标识的爬虫请求,添加
User-Agent模拟浏览器访问能提升成功率。 - 编码处理:俄语网站容易出现乱码,手动指定
utf-8编码可保证内容解析正常。 - 存在性判断:添加元素存在性检查,避免因元素缺失导致代码报错,提升程序健壮性。
内容的提问来源于stack exchange,提问作者Fareed
相关产品推荐
相关产品推荐

