Tentando usar Python e Selenium para rolar e raspar uma página da Web iterativamente
Recentemente, fiz uma pergunta (referenciada aqui:Raspagem na Web Python (Beautiful Soup, Selenium e PhantomJS): Raspando apenas parte da página inteira) que ajudaram a identificar um problema que tive ao raspar todo o conteúdo de uma página que é atualizada dinamicamente quando se rola. No entanto, ainda não consigo organizar meu código para apontar para o elemento correto usando selênio e rolar a página iterativamente. Também descobri que, quando rolar manualmente a página em questão, parte do conteúdo original quando a página carregada desaparece enquanto o novo conteúdo é atualizado. Por exemplo, veja a imagem abaixo ...
Eu direcionei o contêiner com os dados que estou tentando raspar abaixo (destacados em azul).
Primeiro, estou tendo problemas para selecionar o elemento certo para rolar a página, pois nunca precisei fazer isso antes. Acredito que precisaria usar selênio para direcionar o contêiner e, em seguida, usar a função "execute_script" para rolar a página para baixo, porque essa tabela está incorporada no corpo da página da web. No entanto, parece que não consigo fazer isso funcionar.
scroll = driver.find_element_by_class_name("ag-body-viewport")
driver.execute_script("arguments[0].scrollIntoView();", scroll)
Segundo, quando tiver a capacidade de rolar, precisarei rolar um pouco de cada vez e raspar iterativamente. O que quero dizer é que, se você olhar na imagem, verá um monte de tags 'div' dentro do
Por exemplo ... quando a página é carregada e eu passo o html para o Beautifulsoup. Eu posso raspar as primeiras 40 linhas. Se eu rolar para baixo, digamos 40 linhas, passarei as linhas 40 a 80 para a beautifulsoup e as linhas 1 a 40 não estarão mais disponíveis, pois os dados foram atualizados dinamicamente ...
Para encurtar a história, o que eu quero é ser capaz de raspar todo o conteúdo da imagem fornecida e usar o selênio para rolar cerca de 40 linhas, raspar os próximos 40, depois rolar para baixo e raspar os próximos 40 e assim por diante ... Qualquer dicas sobre como fazer com que o selênio role nesse contêiner incorporado e como fazer rolagem para baixo iterativamente, a fim de capturar todos os dados no contêiner quando ele é atualizado dinamicamente à medida que você rola. Qualquer ajuda extra será muito apreciada.