Очистка $ парсинга нескольких HTML-таблиц с одним и тем же URL-адресом (beautifulsoup & selenium) - PullRequest
0 голосов
/ 03 июня 2018

Я пытаюсь почистить полную таблицу HTML с этого сайта: https://www.iscc -system.org / сертификаты / все-сертификаты /

Мой код выглядит следующим образом:

from selenium import webdriver
import time
import pandas as pd

url = 'https://www.iscc-system.org/certificates/all-certificates/'
browser = webdriver.Chrome('/home/giuseppe/bin/chromedriver')
browser.get(url)

csvfile = open('Scrape_certificates', 'a')     

dfs = pd.read_html('https://www.iscc-system.org/certificates/all-certificates/', header=0)

for i in range(1,10):
    for df in dfs:
    df.to_csv(csvfile, header=False)
    link_next_page = browser.find_element_by_id('table_1_next')
    link_next_page.click()
    time.sleep(4)
    dfs = pd.read_html(browser.current_url)

csvfile.close() 

Приведенный выше код приведен только для первых 10 страниц полной таблицы в качестве примера.Проблема в том, что вывод всегда повторяется одна и та же первая таблица 10 раз, хотя при нажатии кнопки «следующая таблица» обновляется фактическая таблица (по крайней мере, если я вижу веб-страницу), я не могу получить реальные новые данныеиз следующей таблицы.Я всегда получаю одни и те же данные из первой таблицы.

1 Ответ

0 голосов
/ 03 июня 2018

Сначала вы читаете URL с пандами, а не с источником страницы.Это приведет к появлению новой страницы, не считанной источником, созданным Selenium.Во-вторых, вы хотите ограничить чтение таблицей с id = table_1.Попробуйте это:

from selenium import webdriver
import time
import pandas as pd

url = 'https://www.iscc-system.org/certificates/all-certificates/'
browser = webdriver.Chrome('/home/giuseppe/bin/chromedriver')
browser.get(url)

csvfile = open('Scrape_certificates', 'a')

for i in range(1,10):
    dfs = pd.read_html(browser.page_source, attrs = {'id': 'table_1'})
    for df in dfs:
        df.to_csv(csvfile, header=False)
    link_next_page = browser.find_element_by_id('table_1_next')
    link_next_page.click()
    time.sleep(4)

csvfile.close()

Вам потребуется удалить или отфильтровать строку 10 для каждого результата, так как это навигация.

...