веб-очистка нескольких страниц после входа с использованием python

#python #pandas #selenium #web-scraping

#python #pandas #selenium #веб-очистка

Вопрос:

Попытка очистки двух таблиц на отдельных страницах после доступа к сайту через логин. Пробовал несколько разных способов и не могу понять это. Последняя попытка показала некоторые перспективы, но к списку фреймов данных был добавлен только первый фрейм данных. Что-то вроде следующего:

 from selenium import webdriver
import pandas as pd
import requests
import time
from bs4 import BeautifulSoup as BS
   

    def text_to_chart (url, table) :
    
    df_list = []
   
    driver = webdriver.Chrome(path)
    driver.get(login)
    driver.find_element_by_xpath(password block).send_keys(password)
    driver.find_element_by_xpath(username block).send_keys(username)
    driver.find_element_by_xpath(submit).click()
    time.sleep(10)

    df = pd.DataFrame()
    
    for url, table in zip(urls, tables) :
        driver.get(url)
        time.sleep(10)
        soup = BS(driver.page_source, 'html')
        new_table = soup.find_all('table',
                  attrs = {'class': table})
        results_list = pd.read_html(str(new_table[0]))
        df = df.append(pd.DataFrame(results_list[0]))
       
    return df


    def scrape(url, table)
        df_list = []
        df_list = df_list.append(text_to_chart(url, table))
    
    
    scrape(url_list, table_list)
  

Итак, что я должен сделать, чтобы очистить несколько страниц?

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

1. Я думаю, это будет актуальный вопрос. Итак, в чем именно заключается вопрос?

2. Это не сработало бы для очистки таблицы с обеих страниц. Я пытаюсь понять, в чем моя ошибка, или если есть лучший способ решить эту проблему в целом.

Ответ №1:

Я предлагаю вам сохранить значения в списке словарей, а затем преобразовать его в dataframe.Это будет хорошо и просто.

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

1. Спасибо за ваш ответ! Вы имеете в виду, что вместо двух списков передайте словарь? Например, dict = {url: table, url: таблица и т.д.}? Как бы я затем повторил это, чтобы перемещаться по страницам и очищать мой контент?

Ответ №2:

Решено! Я внес несколько изменений, которые привели к появлению одной функции, которая создала мой список df. Затем я начал сеанс, вошел в систему и вызвал функцию, сохранив выходные данные в моей переменной df_list.

 from selenium import webdriver
import pandas as pd
import requests
import time
from bs4 import BeautifulSoup as BS



def text_to_chart (urls, tables) :

    df = []

    for url, table in zip(urls, tables) :
        driver.get(url)
        time.sleep(10)
        soup = BS(driver.page_source, 'html')
        new_table = soup.find_all('table',
              attrs = {'class': table})
        results_list = pd.read_html(str(new_table[0]))
        df.append(pd.DataFrame(results_list[0]))
   
    return df




driver = webdriver.Chrome(path)
driver.get(login)
driver.find_element_by_xpath(password block).send_keys(password)
driver.find_element_by_xpath(username block).send_keys(username)
driver.find_element_by_xpath(submit).click()
time.sleep(10)

df_list = text_to_chart(url_list, table_list)