使用BeautifulSoup4无法抓取指定表格数据的技术求助
别担心,刚入门web scraping的时候摸不着头脑太正常了!我来一步步带你用BeautifulSoup4搞定这个表格数据的抓取~
第一步:先安装必要的工具库
首先你需要安装两个Python库:requests用来获取网页内容,beautifulsoup4用来解析HTML。打开命令行,输入下面的命令:
pip install requests beautifulsoup4
第二步:编写抓取代码
下面是针对你需求的完整代码,我会在后面详细解释每一部分:
import requests from bs4 import BeautifulSoup # 替换成你要抓取的目标网站的URL target_url = "这里填你要爬的网站地址" # 1. 获取网页内容 response = requests.get(target_url) if response.status_code != 200: print(f"哎呀,请求网页失败了,状态码:{response.status_code}") exit() # 2. 用BeautifulSoup解析HTML soup = BeautifulSoup(response.text, "html.parser") # 3. 定位目标表格 # 因为你说表格在页面中部,我们可以通过表格里的特征文本(比如"末四位数")来找到它 target_table = None all_tables = soup.find_all("table") for table in all_tables: if "末四位数" in table.get_text(): target_table = table break if not target_table: print("没找到目标表格哦,可能是URL不对或者页面结构变了") exit() # 4. 提取表格里的数据 result = {} # 遍历表格的每一行 for row in target_table.find_all("tr"): # 获取每行的单元格(可能是<td>或者<th>标签) cells = row.find_all(["td", "th"]) # 确保每行至少有两个单元格(一个是标签,一个是数字) if len(cells) >= 2: # 提取标签文本(比如"末四位数"),去掉多余的空格 label = cells[0].get_text(strip=True) # 提取数字部分,按逗号分割成列表,去掉每个数字的空格 numbers = [num.strip() for num in cells[1].get_text(strip=True).split(",")] result[label] = numbers # 5. 打印或者保存结果 print("抓取到的数据:") for label, nums in result.items(): print(f"{label}: {nums}")
代码解释
- 获取网页内容:
requests.get(target_url)会帮你把网页的HTML代码下载下来,status_code == 200表示请求成功。 - 解析HTML:
BeautifulSoup会把杂乱的HTML代码转换成容易操作的对象,不用你手动去读复杂的标签结构。 - 定位表格:我们先找出页面里所有的表格,然后逐个检查哪个表格包含你要的“末四位数”文本,这样就能精准定位到目标表格,不用管它在页面的哪个位置。
- 提取数据:遍历表格的每一行,把每行的标签(比如“末四位数”)和对应的数字组提取出来,用逗号分割成列表,最后整理成字典格式,方便你后续使用或者保存。
小提示
如果运行后没找到表格,可能是页面结构和我假设的不一样:
- 检查目标表格的标签:有些表格可能用了
div代替table,或者有特定的class属性(比如<table class="prize-table">),这时候可以用soup.find("table", class_="prize-table")直接定位。 - 查看网页源码:你可以右键点击页面的表格,选择“检查”,看看浏览器开发者工具里表格的具体结构,然后调整代码里的定位方式。
内容的提问来源于stack exchange,提问作者Serena




