скрести сайты с бесконечной прокруткой


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

3 26

3 ответа:

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

Шаг 1: Установите Selenium с помощью pip
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: при необходимости распечатайте данные.

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

Но если вы должны скрести...

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

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

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