You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas给现有DataFrame列追加内容时仅覆盖前100行问题求助

问题原因

  • 语法使用错误:df['rank'] =+ ranks 等价于 df['rank'] = ranks,是直接对rank列做覆盖赋值,而非追加数据。每次爬取的ranks只有单页100条数据,因此总DataFrame始终只有100行,旧数据会被新爬取的数据覆盖。
  • 实现逻辑错误:分页爬取多页数据时,应先将单页的全量字段数据整理为临时结构,再追加到总DataFrame末尾,单独对某一列赋值无法实现行追加的效果。
  • 分页判断逻辑bug:Selenium的find_element方法找不到元素时会直接抛出异常,不会返回None,原有判断逻辑无法正常触发终止条件。

修复后代码

import functions
import pandas as pd
from time import sleep
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.common.exceptions import NoSuchElementException

pd.set_option('max_rows', 10)
site = functions.pagina()

# 浏览器配置
options = Options()
options.headless = True
driver = webdriver.Firefox(options=options)

driver.get(site)
print('Esperando 5s')
sleep(5)
# 初始化总DataFrame
df = pd.DataFrame(columns = ['rank','nome','classe','item_lvl','servidor','mortes_temporada'])

while True:
    try:
        # 查找下一页按钮,找不到就跳出循环
        next_page = driver.find_element_by_css_selector('#pagination-hook > nav > ul > li:nth-child(2) > a')
    except NoSuchElementException:
        break
    
    print(driver.current_url[-6:].upper())
    # 爬取当前页所有字段数据,可根据实际页面的列位置调整xpath
    ranks = [rank_page.text for rank_page in driver.find_elements_by_xpath('//div[4]//div[1]/table/tbody/tr/td[1]')]
    nomes = [nome.text for nome in driver.find_elements_by_xpath('//div[4]//div[1]/table/tbody/tr/td[2]')]
    classes = [classe.text for classe in driver.find_elements_by_xpath('//div[4]//div[1]/table/tbody/tr/td[3]')]
    item_lvls = [item.text for item in driver.find_elements_by_xpath('//div[4]//div[1]/table/tbody/tr/td[4]')]
    servidores = [serv.text for serv in driver.find_elements_by_xpath('//div[4]//div[1]/table/tbody/tr/td[5]')]
    mortes = [morte.text for morte in driver.find_elements_by_xpath('//div[4]//div[1]/table/tbody/tr/td[6]')]
    
    # 生成单页临时DataFrame
    page_df = pd.DataFrame({
        'rank': ranks,
        'nome': nomes,
        'classe': classes,
        'item_lvl': item_lvls,
        'servidor': servidores,
        'mortes_temporada': mortes
    })
    # 追加到总DataFrame
    df = pd.concat([df, page_df], ignore_index=True)
    
    # 点击下一页
    driver.execute_script("arguments[0].click();", next_page)
    sleep(4)
    
    print('*' * 80)
    print(df)
    print('*' * 80)

# 所有页爬取完后可按需保存数据
# df.to_csv('爬取结果.csv', index=False, encoding='utf-8-sig')
driver.quit()

关键改动说明

  • 新增异常捕获判断下一页是否存在,避免爬取到最后一页时报错终止
  • 每次爬取单页所有列的完整数据,生成临时DataFrame后通过pd.concat追加到总表末尾,ignore_index=True保证行索引连续不重复
  • 移除了无意义的driver.get(driver.current_url)重复加载当前页的逻辑

内容的提问来源于stack exchange,提问作者Breno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:30:03