zip-файл.BadZipFile: Файл не является zip-файлом, который не может хранить данные в excel

#python #excel #pandas #dataframe #web-scraping

Вопрос:

привет, ребята, я собирал некоторые данные и сохранял их в файле excel, раньше код работал нормально, но я не знаю, почему я внезапно столкнулся с этой ошибкой

это код

 import time
import pandas as pd
from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.chrome.options import Options
from urllib.parse import urljoin
import openpyxl
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC



# chrome_options=Options()
# chrome_options.add_argument('--headless')

##### Web scrapper for infinite scrolling page #####
driver = webdriver.Chrome(executable_path='./chromedriver.exe')

driver.get("https://www.zomato.com/hyderabad/gachibowli-restaurants/hyderabadi?rating_range=4.0-5.0amp;category=2")
time.sleep(10)  # Allow 2 seconds for the web page to open
scroll_pause_time = 1 # You can set your own pause time. My laptop is a bit slow so I use 1 sec
screen_height = driver.execute_script("return window.screen.height;")   # get the screen height of the web
i = 1
count=0

while True:
    # scroll one screen height each time
    driver.execute_script("window.scrollTo(0, {screen_height}*{i});".format(screen_height=screen_height, i=i))
    i  = 1
    time.sleep(scroll_pause_time)
    # update scroll height each time after scrolled, as the scroll height can change after we scrolled the page
    scroll_height = driver.execute_script("return document.body.scrollHeight;")
    # Break the loop when the height we need to scroll to is larger than the total scroll height
    if (screen_height) * i > scroll_height:
        break
page_sources= BeautifulSoup(driver.page_source, "html.parser")
title=driver.find_elements_by_xpath("//a[@class='sc-jHZirH intUsQ']")
names=[]
addresses=[]
catagories=[]
for i in title:
    count  = 1
    name =i.find_element_by_xpath('./div/h4').text
    address = i.find_element_by_xpath('./p[1]').text
    catags=i.find_element_by_xpath("./div[2]/p[@class='sc-1hez2tp-0 sc-fNHLbd hStwxV']").text
    names.append(name)
    addresses.append(address)
    catagories.append(catags)


df = pd.DataFrame({'Names': names, 'Addresses': addresses,'Categories': catagories })
writer = pd.ExcelWriter('hydrabad_Gachibowli.xlsx',mode='a')
df.to_excel(writer,'Hyde')
writer.save()

print(count)
driver.close()
 

и ошибка, с которой я сталкиваюсь

 Traceback (most recent call last):
  File "C:/Users/krishan/PycharmProjects/zomato/bakery.py", line 53, in <module>
    writer = pd.ExcelWriter('hydrabad_Gachibowli.xlsx',mode='a')
  File "D:Anacondaenvsweb scrappinglibsite-packagespandasioexcel_openpyxl.py", line 65, in __init__
    self.book = load_workbook(self.handles.handle)
  File "D:Anacondaenvsweb scrappinglibsite-packagesopenpyxlreaderexcel.py", line 313, in load_workbook
    reader = ExcelReader(filename, read_only, keep_vba,
  File "D:Anacondaenvsweb scrappinglibsite-packagesopenpyxlreaderexcel.py", line 124, in __init__
    self.archive = _validate_archive(fn)
  File "D:Anacondaenvsweb scrappinglibsite-packagesopenpyxlreaderexcel.py", line 96, in _validate_archive
    archive = ZipFile(filename, 'r')
  File "D:Anacondaenvsweb scrappinglibzipfile.py", line 1269, in __init__
    self._RealGetContents()
  File "D:Anacondaenvsweb scrappinglibzipfile.py", line 1336, in _RealGetContents
    raise BadZipFile("File is not a zip file")
zipfile.BadZipFile: File is not a zip file
 

блок кода, в котором я получаю ошибку ранее, когда он работал идеально. файл

 df = pd.DataFrame({'Names': names, 'Addresses': addresses,'Categories': catagories })
writer = pd.ExcelWriter('hydrabad_Gachibowli.xlsx',mode='a')
df.to_excel(writer,'Hyde')
writer.save()
 

Я искал другое решение, но ничего не проясняет
, пожалуйста, ребята, какие-либо предложения

Ответ №1:

Возможно, это может вам помочь: файлы «*.xlsx» — это архивированные каталоги/файлы. В случае, если у вас есть файл (скажем, файл «*.csv», который является плоским текстовым файлом), и кто-то переименовал его в «*.xlsx», просто изменив расширение, тогда это не сработает.

Поэтому я бы посоветовал вам проверить, действительно ли файл «*.xlsx» имеет правильный формат.

Комментарии:

1. так вы имеете в виду,что мне нужно писать так{ writer = pd.ExcelWriter(‘hydrabad_Gachibowli*.xlsx’, mode=’a’) } вместо writer = pd.ExcelWriter(‘hydrabad_Gachibowli.xlsx’,режим=’а’)

2. ваш ответ сбивает с толку ,можете ли вы прояснить это, используя пример или применив тонкости к моему коду, чтобы я мог лучше понять