如何使用Selenium遍历列表并将网页搜索结果存入DataFrame?
解决Selenium循环搜索结果存入DataFrame的问题
嘿,刚接触Python就能写出这样的代码已经很赞啦!咱们来一步步把你的代码改对,让每个搜索结果都能正确存入DataFrame里~
首先,先说说你现有代码里的几个小问题:
- 没导入
webdriver.Chrome,运行时会直接报错 - 每次搜索完没清空搜索框,下次输入会把关键词叠加上(比如第一次输Commonwealth Bank,第二次会变成Commonwealth BankRio Tinto,肯定搜不对)
- 每次循环都把
df3重新赋值成单个元素的列表,之前的结果全被覆盖了,根本存不下多个公司的数据 - 没处理页面加载等待,有时候页面还没加载完就去查找元素,会抛出找不到元素的错误
下面是修正后的完整代码,我会给你逐段解释:
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By import pandas as pd import numpy as np url = 'https://au.finance.yahoo.com/australia/' driver_path = 'chromedriver.exe' # 初始化Chrome浏览器 browser = webdriver.Chrome(executable_path=driver_path) browser.get(url) # 等待搜索框加载完成(最多等10秒),避免刚打开页面就找不到元素 loop_search = WebDriverWait(browser, 10).until( EC.presence_of_element_located((By.ID, 'yfin-usr-qry')) ) search_companies = ['Commonwealth Bank','Rio Tinto','Wesfarmers'] # 初始化一个空列表,用来累积所有公司的搜索结果 results = [] for company in search_companies: # 每次搜索前清空搜索框,防止关键词叠加 loop_search.clear() # 输入当前要搜索的公司名称 loop_search.send_keys(company) # 等待搜索按钮可点击后再点击,避免按钮还没加载好就点不动 search_button = WebDriverWait(browser, 10).until( EC.element_to_be_clickable((By.ID, 'search-button')) ) search_button.click() # 等待目标信息区域加载完成,再提取文本 comp_info = WebDriverWait(browser, 10).until( EC.presence_of_element_located((By.ID, 'quote-header-info')) ).text # 把公司名称和对应的信息以字典形式加入结果列表,这样转DataFrame时列名更清晰 results.append({'公司名称': company, '详情信息': comp_info}) # 将结果列表转换成DataFrame df3 = pd.DataFrame(results) # 打印看看结果 print(df3) # 最后记得关闭浏览器,释放资源 browser.quit()
关键改进点说明:
- 等待机制:用
WebDriverWait配合expected_conditions,确保元素加载完成后再操作,解决页面加载慢导致的元素找不到问题 - 清空搜索框:每次循环前调用
loop_search.clear(),避免关键词叠加 - 结果累积:用空列表
results来存储每个公司的信息,而不是每次覆盖变量 - 结构化存储:用字典存储每个公司的名称和信息,转成DataFrame后会自动生成对应的列,方便后续处理
如果quote-header-info里的信息太杂,你还可以进一步拆分文本,提取具体数据(比如股票代码、当前股价等),比如用字符串的split()方法来分割内容,这部分可以根据你的需求调整~
内容的提问来源于stack exchange,提问作者R Sta
相关产品推荐
相关产品推荐

