#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)