Python Selenium爬取URL后无法生成Excel文件求助
问题分析与解决方案
代码核心问题
- 错误的变量赋值:
urls = print(elem.get_attribute("href"))中,print()函数返回None,导致urls始终为None,无法用于DataFrame的写入。 - 数据写入逻辑错误:
df.loc[i,urls]放在外层循环之外,仅会处理最后一个索引i,且列名为None,完全无效。 - 缺少数据收集逻辑:仅打印爬取到的URL,未将数据存储到DataFrame中。
- 等待时机错误:
time.sleep(2)放在代码末尾,未在页面加载后等待,可能导致元素未加载完成就爬取。 - 可能缺少Excel写入依赖:
pandas.to_excel需要openpyxl引擎,未安装会导致写入失败。
修正后的代码
import time from selenium.webdriver.common.by import By # 新增列用于存储爬取到的URL df['Crawled_URLs'] = '' for i in range(len(df)): driver.get(df.loc[i, 'URL']) time.sleep(2) # 等待页面加载完成 # 定位所有带href的a标签 link_elements = driver.find_elements(by=By.XPATH, value="//a[@href]") # 收集所有href链接到列表 crawled_urls = [elem.get_attribute("href") for elem in link_elements] # 将链接用换行分隔存入DataFrame,方便Excel中查看 df.loc[i, 'Crawled_URLs'] = '\n'.join(crawled_urls) print(f"完成第{i}条URL处理,共爬取{len(crawled_urls)}个链接") # 写入Excel,指定openpyxl引擎 df.to_excel('Results.xlsx', index=False, engine='openpyxl') print("Excel文件已成功生成")
关键修改说明
- 新增
Crawled_URLs列,明确指定爬取结果的存储位置。 - 使用列表推导式收集所有href链接,替代错误的
print()赋值逻辑。 - 将
time.sleep(2)移至页面加载后,确保元素可被正常定位。 - 写入Excel时指定
engine='openpyxl',避免因依赖缺失导致失败。 - 增加进度打印,便于跟踪处理状态。
前置准备
如果未安装openpyxl,先执行以下命令安装:
pip install openpyxl
内容的提问来源于stack exchange,提问作者rushika pawar
相关产品推荐
相关产品推荐

