как сохранить в новый CSV-файл каждый раз, когда он проходит через l oop на страницу - PullRequest
0 голосов
/ 10 апреля 2020
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
import pandas as pd
from pymongo import MongoClient
import tkinter as tk
from tkinter import filedialog
from pandas import DataFrame
from datetime import datetime

# launch WMS
url = "https://inserturlhere.com/solution/login.htm"
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get(url)

#Login start
username = driver.find_element_by_id("username")
username.clear()
username.send_keys("xxx")

password = driver.find_element_by_id("password")
password.clear()
password.send_keys("xxx")

driver.find_element_by_id("loginButton").click()
#login end


# set variables
pageSize = 200
pageNo = 0
currentView = 33362
entityName = "Item"
now = datetime.now()

def get_filename_datetime():
    return str(entityName) + "-" + str(now.strftime("%d%m%Y-%H%M%S")) +".csv"

for pageNo in range(10):
    url2 = "https://inserturlhere.com/solution/entitylist.htm?entityName=Item&tabName=Item&pageNo={pageNo}&pageSize={pageSize}&currentViewId={currentView}".format(pageNo=pageNo, pageSize=pageSize, currentView=currentView)
    # open shipments page
    driver.get(url2)
    html = driver.page_source
    dfs = pd.read_html(html, attrs={"class":"roundedTable"}, header=5)
    for df in dfs:
        df.dropna(how="all", axis="columns", inplace=True)
        df.drop({"No", "Process Action"}, axis="columns", inplace=True)
        df.dropna(how='all', axis=0, inplace=True)
        df.append(dfs)
        df.to_csv(get_filename_datetime(), index=False)

Эй, ребята. Как я могу изменить код выше, чтобы сохранить новый CSV каждый раз, когда он зацикливается на странице? сейчас он сохраняет только один файл, содержащий последнюю страницу из файла.

Дайте мне знать, если нужны дополнительные данные! Спасибо!

Ответы [ 3 ]

0 голосов
/ 10 апреля 2020

Не пробовал, но, возможно, ваш dfs для l oop работает меньше секунды. Попробуйте добавить 1 секунду задержки в ваш l oop.

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
import pandas as pd
from pymongo import MongoClient
import tkinter as tk
from tkinter import filedialog
from pandas import DataFrame
from datetime import datetime
import time

# launch WMS
url = "https://inserturlhere.com/solution/login.htm"
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get(url)

#Login start
username = driver.find_element_by_id("username")
username.clear()
username.send_keys("xxx")

password = driver.find_element_by_id("password")
password.clear()
password.send_keys("xxx")

driver.find_element_by_id("loginButton").click()
#login end


# set variables
pageSize = 200
pageNo = 0
currentView = 33362
entityName = "Item"
now = datetime.now()

def get_filename_datetime():
    return str(entityName) + "-" + str(now.strftime("%d%m%Y-%H%M%S")) +".csv"

for pageNo in range(10):
    url2 = "https://inserturlhere.com/solution/entitylist.htm?entityName=Item&tabName=Item&pageNo={pageNo}&pageSize={pageSize}&currentViewId={currentView}".format(pageNo=pageNo, pageSize=pageSize, currentView=currentView)
    # open shipments page
    driver.get(url2)
    html = driver.page_source
    dfs = pd.read_html(html, attrs={"class":"roundedTable"}, header=5)
    for df in dfs:
        df.dropna(how="all", axis="columns", inplace=True)
        df.drop({"No", "Process Action"}, axis="columns", inplace=True)
        df.dropna(how='all', axis=0, inplace=True)
        df.append(dfs)
        df.to_csv(get_filename_datetime(), index=False)
        time.sleep(1)
0 голосов
/ 10 апреля 2020

Проблема в том, что имя файла никогда не меняется, поэтому l oop постоянно перезаписывает его. На данный момент есть только 1 значение, оно не меняется с течением времени.

entityName = "Item"
now = datetime.now()

def get_filename_datetime():
    return str(entityName) + "-" + str(now.strftime("%d%m%Y-%H%M%S")) +".csv"

Кроме того, l oop, похоже, также имеет ошибку, как отмечалось в wwii, в том, что вы добавляем список фреймов данных (dfs) к отдельному фрейму данных. Если вы намерены go просмотреть все таблицы HTML на странице, внести некоторые изменения и затем объединить их, вы должны добавить измененный df в новый список, а затем объединить и сохранить его.

modified_dfs = []
for df in pd.read_html(html, attrs={"class":"roundedTable"}, header=5):
    df = df.dropna(how="all", axis="columns")
    df = df.drop({"No", "Process Action"}, axis="columns")
    df = df.dropna(how='all', axis=0)
    modified_dfs.append(df)
pd.concat(modified_dfs).to_csv('unique_filename', index=False)
0 голосов
/ 10 апреля 2020

Вы можете использовать pageNo как уникальный номер для добавления к имени файла:

df.to_csv(f'{get_filename_datetime()}_{pageNo}', index=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...