解析税号数据遇DataFrame无append属性报错,寻求解决方案
问题原因
AttributeError: 'DataFrame' object has no attribute 'append' 是因为Pandas 2.0及以上版本移除了DataFrame.append()方法,该方法在旧版Pandas中可用,但新版已被废弃。
解决办法
最高效的替代方案是先将所有待添加的数据存入一个列表,最后一次性转换为DataFrame,避免频繁创建新DataFrame带来的性能损耗。同时修复代码中record_count的提取问题(当前直接存储BeautifulSoup对象会导致Excel中数据异常)。
修改后的完整代码:
import requests from bs4 import BeautifulSoup import pandas as pd headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0;Win64) AppleWebkit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/" } # 初始化空列表存储数据,替代原空DataFrame data_list = [] values = [9704093992, 9718162290, 7727362380, 9723114824, 9701225810] for value in values: url = f"https://zakupki.gov.ru/epz/dishonestsupplier/search/results.html?searchString={value}&morphology=on&search-filter=%D0%94%D0%B0%D1%82%D0%B5+%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F&savedSearchSettingsIdHidden=&sortBy=UPDATE_DATE&pageNumber=1&sortDirection=false&recordsPerPage=_10&showLotsInfoHidden=false&fz94=on&fz223=on&ppRf615=on&dsStatuses=&inclusionDateFrom=&inclusionDateTo=&lastUpdateDateFrom=&lastUpdateDateTo=" response = requests.get(url, headers=headers) soup = BeautifulSoup(response.content, "html.parser") results = soup.find_all("div", class_="search-registry-entry-block") # 全局提取记录数量,处理元素不存在的情况 record_count_elem = soup.find("div", class_="search-results__total") record_count = record_count_elem.text.strip() if record_count_elem else "0" for result in results: data = result.find("div", class_="registry-entry__body-block").text.strip() inclusion_date = result.find("div", class_="data-block__value").text.strip() # 将数据字典添加到列表 data_list.append( { "Значение": value, "Найдено результатов": len(results), "ИНН поставщика": data, "Даты включения": inclusion_date, "Количество записей": record_count, } ) # 最后将列表转换为DataFrame df = pd.DataFrame(data_list, columns=[ "Значение", "Найдено результатов", "ИНН поставщика", "Даты включения", "Количество записей", ]) df.to_excel("results.xlsx", index=False)
关键修改点
- 用空列表
data_list替代初始空DataFrame,循环中向列表添加数据字典 - 移除
df.append()调用,最后通过pd.DataFrame(data_list)生成最终DataFrame - 修复
record_count的提取逻辑:从页面全局提取(而非每个result节点中查找),并处理元素不存在的情况,避免存储无效的BeautifulSoup对象
内容的提问来源于stack exchange,提问作者dim666
相关产品推荐
相关产品推荐

