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

Python抓取网页表格生成DataFrame遇concat使用问题求助

解决Selenium抓取国家数据生成Pandas DataFrame的问题

你已经通过Selenium成功抓取并打印了目标网页的国家列数据,但无法生成对应的DataFrame。教程中使用的append方法已被Pandas弃用,尝试concat方法未成功,核心问题是没有正确处理元素文本的提取和DataFrame的创建逻辑。

现有可正常运行的代码(打印国家数据)

import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys


url = "https://worldpopulationreview.com/countries"
PATH = 'C:/chromedriver_win32/chromedriver.exe'

driver = webdriver.Chrome(PATH)
driver.get(url)
driver.find_element(By.XPATH, "/html/body/div[1]/div/div/div/div[2]/div/button[2]").click() # 关闭弹窗

countries = driver.find_elements(By.XPATH, ("//*[@id='__next']/div/div[3]/section[2]/div[1]/div/div/div/div[3]/div[2]//tbody/tr/td[1]"))
for x in countries:
    print(x.text)

教程中已弃用的append写法

for i in range(len(countries)):
    df_population = df_population.append({"Countries": countries[i].text})

你尝试的无效代码

df_population = pd.DataFrame(columns=["Countries"]) # 无法填充数据
df_population = pd.concat([pd.DataFrame(**[countries[i].text]**, columns=['Countries']) for i in range(len(countries))], ignore_index=True) # 语法错误+逻辑低效

正确解决方案

最简洁高效的方式是先将所有国家的文本提取为纯字符串列表,再直接用该列表创建DataFrame,完全不需要依赖concat或已弃用的append。

修改后的完整代码

import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By

url = "https://worldpopulationreview.com/countries"
PATH = 'C:/chromedriver_win32/chromedriver.exe'

driver = webdriver.Chrome(PATH)
driver.get(url)
driver.find_element(By.XPATH, "/html/body/div[1]/div/div/div/div[2]/div/button[2]").click()

# 用列表推导式提取所有国家的文本内容
countries = driver.find_elements(By.XPATH, ("//*[@id='__next']/div/div[3]/section[2]/div[1]/div/div/div/div[3]/div[2]//tbody/tr/td[1]"))
country_names = [country.text for country in countries]

# 直接从列表创建DataFrame
df_population = pd.DataFrame(country_names, columns=["Countries"])
print(df_population)

# 记得关闭浏览器释放资源
driver.quit()

无效代码的问题说明

你之前的concat写法存在两个问题:

  1. 语法错误:代码中的**[countries[i].text]**多了不必要的双星号,属于非法语法;
  2. 逻辑低效:即使修复语法,循环拼接单行DataFrame的方式性能极差,远不如先收集完整列表再创建DataFrame的方式高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:52:56