невозможно сохранить очищенные данные в файле excel

avatar
krishan
9 августа 2021 в 06:45
113
2
-1

Привет, ребята, я очищал эти данные, и мой код работает нормально, но я не могу понять, как сохранить эти очищенные данные в файл 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

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

driver.get("https://www.zomato.com/ncr/south-delhi-restaurants/fast-food?rating_range=4.0-5.0&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']")

for i in title:
    count += 1  
    name =i.find_element_by_xpath('./div/h4')
    address = i.find_element_by_xpath('./p[1]')

    #data = openpyxl.load_workbook('Bakery.xlsx')
df = pd.DataFrame({"Bakery Restaurants": name,"Address":address})

print(count)
driver.close()

это основной блок кода

page_sources= BeautifulSoup(driver.page_source, "html.parser")
title=driver.find_elements_by_xpath("//a[@class='sc-jHZirH intUsQ']")

for i in title:
    count += 1  
    name =i.find_element_by_xpath('./div/h4')
    address = i.find_element_by_xpath('./p[1]')

    #data = openpyxl.load_workbook('Bakery.xlsx')
df = pd.DataFrame({"Bakery Restaurants": name,"Address":address})

print(count)
driver.close()

пожалуйста, помогите мне, я слишком запутался, любое предложение/решение будет оценено

Источник
shoaib30
9 августа 2021 в 06:51
0

Если ваши данные уже находятся в pandas df - pandas.pydata.org/pandas-docs/stable/reference/api/…

krishan
9 августа 2021 в 06:55
0

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

Ответы (2)

avatar
krishan
9 августа 2021 в 09:01
0

это моя попытка и работает нормально

names=[]
addresses=[]

for i in title:
    count += 1
    name =i.find_element_by_xpath('./div/h4').text
    address = i.find_element_by_xpath('./p[1]').text
    names.append(name)
    addresses.append(address)

df = pd.DataFrame({'Names': names, 'Addresses': addresses})
writer = pd.ExcelWriter('pandas_simple.xlsx')
df.to_excel(writer,'Sheet1')
writer.save()
avatar
shoaib30
9 августа 2021 в 07:06
1

Предположим, что парсинг работает правильно. Вам нужно сохранить name и address в excel

# scraping code
#
#
names = []  # Create lists to hold your columns
addresses = [] # Create lists to hold your columns
for i in title:
    count += 1  
    name =i.find_element_by_xpath('./div/h4')
    names.append(name)
    address = i.find_element_by_xpath('./p[1]')
    addresses.append(address)

df = pd.DataFrame({'Names': names, 'Addresses': addresses})  # Create a DF with the lists

with pd.ExcelWriter('output.xlsx') as writer:
    df.to_excel(writer, sheet_name='Sheet1')

Примечание. Убедитесь, что тип данных извлеченных значений — строка или тип, поддерживаемый пандами и Excel. А не объект Python.

Документы: Вставить в DataFrame DataFrame в Excel

krishan
9 августа 2021 в 07:15
0

это ошибка, которую я получаю Traceback (последний последний вызов): файл «C:/Users/krishan/PycharmProjects/zomato/bakery.py», строка 45, в <module> with('output.xlsx', 'w+ ') как op: AttributeError: введите что не так

shoaib30
9 августа 2021 в 07:35
0

@krishan извините, я пропустил функцию open(). Я не могу протестировать код, так как у меня нет данных очистки

krishan
9 августа 2021 в 09:24
0

извините @shoaib30, но это все еще не работает, но я сделал это по-другому, пожалуйста, проверьте мой ответ, спасибо за участие, я очень ценю это

shoaib30
9 августа 2021 в 09:49
0

@krishan Я изменил свой ответ с помощью ExcelWriter, и я полагаю, у вас есть то же самое. Используйте его с with или не забудьте закрыть его, иначе файл будет открыт.