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