web-dev-qa-db-fra.com

gratter les sites Web avec défilement infini

J'ai écrit de nombreux grattoirs mais je ne sais pas vraiment comment gérer les défileurs infinis. De nos jours, la plupart des sites Web, etc., Facebook, Pinterest ont des défileurs infinis.

28
add-semi-colons

Vous pouvez utiliser Selenium pour supprimer le site Web à défilement infini comme Twitter ou Facebook.

Étape 1: installer Selenium à l'aide de pip

pip install Selenium 

Étape 2: utilisez le code ci-dessous pour automatiser le défilement infini et extraire le code source

from Selenium import webdriver
from Selenium.webdriver.common.by import By
from Selenium.webdriver.common.keys import Keys
from Selenium.webdriver.support.ui import Select
from Selenium.webdriver.support.ui import WebDriverWait
from Selenium.common.exceptions import TimeoutException
from Selenium.webdriver.support import expected_conditions as EC
from Selenium.common.exceptions import NoSuchElementException
from Selenium.common.exceptions import NoAlertPresentException
import sys

import unittest, time, re

class Sel(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "https://Twitter.com"
        self.verificationErrors = []
        self.accept_next_alert = True
    def test_sel(self):
        driver = self.driver
        delay = 3
        driver.get(self.base_url + "/search?q=stckoverflow&src=typd")
        driver.find_element_by_link_text("All").click()
        for i in range(1,100):
            self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
            time.sleep(4)
        html_source = driver.page_source
        data = html_source.encode('utf-8')


if __name__ == "__main__":
    unittest.main()

Étape 3: imprimez les données si nécessaire.

27
Pawan Kumar

La plupart des sites qui ont un défilement infini (comme le note Lattyware) ont également une API appropriée, et vous serez probablement mieux servi en l'utilisant plutôt qu'en grattant.

Mais si vous devez gratter ...

Ces sites utilisent JavaScript pour demander du contenu supplémentaire au site lorsque vous atteignez le bas de la page. Tout ce que vous devez faire est de trouver l'URL de ce contenu supplémentaire et vous pouvez le récupérer. La détermination de l'URL requise peut être effectuée en inspectant le script, en utilisant la console Web de Firefox ou en utilisant un proxy de débogage .

Par exemple, ouvrez la console Web de Firefox, désactivez tous les boutons de filtrage à l'exception de Net et chargez le site que vous souhaitez supprimer. Vous verrez tous les fichiers lorsqu'ils seront chargés. Faites défiler la page tout en regardant la console Web et vous verrez les URL utilisées pour les demandes supplémentaires. Ensuite, vous pouvez demander cette URL vous-même et voir dans quel format les données sont (probablement JSON) et les insérer dans votre script Python.

22
kindall

Trouver l'url de la source ajax sera la meilleure option mais elle peut être fastidieuse pour certains sites. Vous pouvez également utiliser un navigateur sans tête comme QWebKit de PyQt et envoyer des événements de clavier tout en lisant les données de l'arborescence DOM. QWebKit a une API sympa et simple.

1
prabu