Подтвердить что ты не робот

Очищать веб-сайты с бесконечной прокруткой

Я написал много скребок, но я не уверен, как обращаться с бесконечными скроллерами. В наши дни большинство веб-сайтов и т.д., Facebook, Pinterest имеют бесконечные скроллеры.

4b9b3361

Ответ 1

Вы можете использовать селен, чтобы сбрасывать бесконечный веб-сайт прокрутки, например, твиттер или facebook.

Шаг 1: Установите селен с помощью пипа

pip install selenium 

Шаг 2: используйте следующий код, чтобы автоматизировать бесконечную прокрутку и извлечь исходный код

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

Шаг 3. Распечатайте данные, если требуется.

Ответ 2

Большинство сайтов, которые имеют бесконечную прокрутку (как отмечает Lattyware), имеют собственный API, и вам, скорее всего, будет лучше обслуживаться, используя это, а не очищать.

Но если вы должны очистить...

Такие сайты используют JavaScript для запроса дополнительного контента с сайта при достижении нижней части страницы. Все, что вам нужно сделать, это выяснить URL этого дополнительного контента, и вы можете его получить. Выяснить требуемый URL можно, проверив script, используя веб-консоль Firefox или используя отладочный прокси.

Например, откройте веб-консоль Firefox, отключите все кнопки фильтра, кроме Net, и загрузите сайт, который вы хотите очистить. Вы увидите все файлы по мере их загрузки. Прокрутите страницу во время просмотра веб-консоли, и вы увидите URL-адреса, используемые для дополнительных запросов. Затем вы можете запросить этот URL самостоятельно и посмотреть, в каком формате находятся данные (возможно, JSON) и получить его в свой Python script.

Ответ 3

Поиск URL-адреса источника ajax будет лучшим вариантом, но для некоторых сайтов это может быть громоздким. В качестве альтернативы вы можете использовать безгласный браузер, например QWebKit от PyQt, и отправлять события клавиатуры при чтении данных из дерева DOM. QWebKit имеет приятный и простой api.