Python Pandas如何将爬取获取的URL数据存入空DataFrame
问题原因
- 存储逻辑写在for循环外部,循环结束后
urls变量仅保留最后一次遍历得到的单个URL,最终生成的DataFrame只会有1条数据 append方法不会修改原DataFrame,你将返回值赋值给了新变量df_test,原本初始化的df1始终为空,多次执行还会覆盖之前的存储结果- 目前pandas 2.0+版本已正式废弃
append方法,继续使用还会触发版本兼容警告
最优解决方案
先把所有爬取到的URL存入列表,再一次性转换为DataFrame,该方案比循环append执行效率高得多,修改后的完整代码如下:
import pandas as pd import time from selenium import webdriver from selenium.webdriver.common.by import By url_list = [] url = 'https://www.welcometothejungle.com/fr/jobs?page=1&refinementList%5Bprofession_name.fr.Tech%5D%5B%5D=Data%20Science' path = '/Users/jdkj/desktop/chromedriver 3' options = webdriver.ChromeOptions() # 原参数chrome_options已过时,替换为标准参数options driver = webdriver.Chrome(path, options=options) driver.get(url) time.sleep(3) # 原xpath冗余条件已移除,find_elements_by_xpath已过时,替换为新标准写法 elems = driver.find_elements(By.XPATH, "//article/div[2]/header/a") for elem in elems: urls = elem.get_attribute("href") print(urls) # 把每个url存入列表 url_list.append(urls) # 列表一次性转DataFrame df1 = pd.DataFrame(url_list, columns=['URLS']) print(df1.head())
兼容旧版本pandas的循环写法(不推荐)
如果你坚持要使用append方法实现,只需要把存储逻辑移到for循环内部,且赋值给原DataFrame变量即可:
df1 = pd.DataFrame() for elem in elems: urls = elem.get_attribute("href") print(urls) # 存储逻辑放在循环内,更新原df1变量 df1 = df1.append({'URLS' : urls}, ignore_index = True) df1.head()
内容的提问来源于stack exchange,提问作者Hichhich
相关产品推荐
相关产品推荐

