我无法将Python输出导出到excel文件

我无法将Python输出导出到excel文件,python,excel,selenium,beautifulsoup,Python,Excel,Selenium,Beautifulsoup,我编写了以下代码,无法将数据导出到excel工作表 from selenium import webdriver import time, re from selenium.webdriver.support.ui import Select from bs4 import BeautifulSoup import pandas as pd chrome_path = r"C:\Users\user\Desktop\chromedriver_win32\chromedriver.exe"

我编写了以下代码,无法将数据导出到excel工作表

from selenium import webdriver 
import time, re
from selenium.webdriver.support.ui import Select
from bs4 import BeautifulSoup
import pandas as pd 

chrome_path = r"C:\Users\user\Desktop\chromedriver_win32\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)

driver.get("http://agmarknet.gov.in/PriceTrends/SA_Pri_Month.aspx")

html_source = driver.page_source


for x in range(1,6): #loop for 5 months
    print (x)
    element_commodity = driver.find_element_by_id ("cphBody_Commodity_list")
    drp_commodity = Select(element_commodity)
    drp_commodity.select_by_visible_text("Wheat")

    time.sleep(15)

    element_year = driver.find_element_by_id ("cphBody_Year_list")
    drp_year = Select(element_year)

    drp_year.select_by_visible_text("2020")

    time.sleep(15)

    element_month = driver.find_element_by_id ("cphBody_Month_list")
    drp_month = Select(element_month)

   drp_month.select_by_index(x)
   time.sleep(15)

    driver.find_element_by_xpath("""//*[@id="cphBody_But_Submit"]""").click()
    time.sleep(15)

    soup = BeautifulSoup(driver.page_source, 'html.parser')
    table = pd.read_html(driver.page_source)[3] #third table is the one that we want
    print(len(table))
    print(table)

    table.to_excel(r'C:\Users\user\Desktop\python.xlsx', sheet_name = 'x')
这是我得到的结果:

   1
   18
             0  ...                             5
   0            State  ...  % Change(Over Previous Year)
   1            Assam  ...                            __
   2      Chattisgarh  ...                        -36.87
   3          Gujarat  ...                          6.73
   4          Haryana  ...                            __
   5        Jharkhand  ...                            __
   6        Karnataka  ...                         -1.82
   7           Kerala  ...                         11.27
   8   Madhya Pradesh  ...                          7.46
   9      Maharashtra  ...                          1.46
   10    NCT of Delhi  ...                          5.05
   11          Odisha  ...                            __
   12          Punjab  ...                            __
   13       Rajasthan  ...                          8.12
   14   Uttar Pradesh  ...                           8.5
   15      Uttrakhand  ...                          2.83
   16     West Bengal  ...                          5.69
   17         Average  ...                           NaN

   [18 rows x 6 columns]
  2
  Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python38\agmarknet soup table extraction 
  trial.py", line 17, in <module>
element_commodity = driver.find_element_by_id ("cphBody_Commodity_list")
  File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 360, in find_element_by_id
return self.find_element(by=By.ID, value=id_)
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site- 
packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element
return self.execute(Command.FIND_ELEMENT, {
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site- 
packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site- 
packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate 
element: {"method":"css selector","selector":"[id="cphBody_Commodity_list"]"}
(Session info: chrome=83.0.4103.61)
1
18
0  ...                             5.
0状态…%变化(与上一年相比)
1阿萨姆__
查蒂斯加尔2号-36.87
3古吉拉特邦。。。6.73
哈里亚纳邦__
5贾坎德__
卡纳塔克邦6号-1.82
喀拉拉邦7号。。。11.27
中央邦8号。。。7.46
9马哈拉施特拉邦。。。1.46
新德里10号。。。5.05
11奥迪沙__
12旁遮普__
13拉贾斯坦邦。。。8.12
北方邦14号。。。8.5
15个手。。。2.83
16西孟加拉邦。。。5.69
平均17。。。楠
[18行x 6列]
2.
回溯(最近一次呼叫最后一次):
文件“C:\Users\user\AppData\Local\Programs\Python38\agmarknet汤表提取
试用版.py“,第17行,in
element_commodity=driver.find_element_by_id(“cphBody_commodity_列表”)
文件“C:\Users\user\AppData\Local\Programs\Python38\lib\site packages\selenium\webdriver\remote\webdriver.py”,第360行,按id查找元素
返回self.find_元素(by=by.ID,value=ID_u)
文件“C:\Users\user\AppData\Local\Programs\Python\38\lib\site-
packages\selenium\webdriver\remote\webdriver.py”,第976行,在find\u元素中
返回self.execute(Command.FIND_元素{
文件“C:\Users\user\AppData\Local\Programs\Python\38\lib\site-
packages\selenium\webdriver\remote\webdriver.py”,执行中的第321行
self.error\u handler.check\u响应(响应)
文件“C:\Users\user\AppData\Local\Programs\Python\38\lib\site-
packages\selenium\webdriver\remote\errorhandler.py”,检查响应中的第242行
引发异常类(消息、屏幕、堆栈跟踪)
selenium.common.exceptions.NoSuchElementException:消息:无此类元素:无法定位
元素:{“方法”:“css选择器”,“选择器”:“[id=“cphBody_商品列表”]”
(会话信息:chrome=83.0.4103.61)
其想法是创建一个excel文件,其中包含5张对应于下拉菜单中5个月的输出的表格。我无法理解为什么.to_excel命令不起作用。提前感谢您的帮助。

一些问题:

  • 每次循环网页都会生成结果,但初始 搜索条件面板不再存在,因此
    NoSuchElementException
    您看到了。一个快速解决方法是添加一个
    驱动程序.back()
    作为循环中的最后一个操作
  • 将数据帧写入多个Excel工作表的方法要复杂一些 比那复杂
  • 为了解决这些问题,我对您的脚本进行了一些更改。逻辑是将所有收集的表存储在
    结果
    列表中,然后将此列表写入Excel,每个表都放在单独的工作表上

    results=[]
    for x in range(1,6): #loop for 5 months
        print (x)
        element_commodity = driver.find_element_by_id ("cphBody_Commodity_list")
        drp_commodity = Select(element_commodity)
        drp_commodity.select_by_visible_text("Wheat")
    
        time.sleep(10)
    
        element_year = driver.find_element_by_id ("cphBody_Year_list")
        drp_year = Select(element_year)
    
        drp_year.select_by_visible_text("2020")
    
        time.sleep(10)
    
        element_month = driver.find_element_by_id ("cphBody_Month_list")
        drp_month = Select(element_month)
    
        drp_month.select_by_index(x)
        time.sleep(10)
    
        driver.find_element_by_xpath("""//*[@id="cphBody_But_Submit"]""").click()
        time.sleep(10)
    
        soup = BeautifulSoup(driver.page_source, 'html.parser')
        table = pd.read_html(driver.page_source)[3] #third table is the one that we want
        print(len(table))
        print(table)
    
        results.append(table)
    
        driver.back()
        time.sleep(1)
    
    with pd.ExcelWriter(r'eexport_sheets.xlsx') as writer:
        for i, table in enumerate(results):
            table.to_excel(writer, sheet_name = f'{i+1}', index=False)
        writer.save()
    
    Excel输出:


    <强>一般注释< /强>考虑使用<代码> WebdriverWait <代码>而不是<代码>时间。睡眠

    现在非常感谢,代码运行得很好!也是WebDrReValw的一个很棒的提示。命令非常有用。非常感谢!不用担心。只要回答满意,请将其标记为已接受。