Ben birçok kazıyıcı yazdım ama ben sonsuz scrollers nasıl ele alacağından emin değilim. Bu günlerde çoğu web sitesi vb, Facebook, Pinterest, sonsuz scrollers vardır.web siteleri kazımak
cevap
Selenium'u, twitter veya facebook gibi sonsuz kaydırmalı web sitesini silmek için kullanabilirsiniz.
Adım 1: pip
pip install selenium
Adım 2 kullanılarak selenyum yükleyin: sonsuz kaydırmayı otomatikleştirmek için aşağıdaki kodu kullanabilirsiniz ve kaynak kodu
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 + "https://stackoverflow.com/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()
Adım 3 ayıklamak: Gerekirse verileri yazdırın.
Döngü, 100 kez aşağı kaydırdığımız anlamına mı geliyor? 100 rastgele seçilmiş bir sayıdır. Bu doğru mu? –
@satarupa Haklısınız, döngü 100 kez aşağı kaydırmaktır –
Sonsuz kaydırma özelliğine sahip sitelerin çoğu (Lattyware notları gibi) düzgün bir API'ye sahiptir ve siz de bu işlemi, daha iyi kazıma yerine kullanarak daha iyi sunacaksınız.
Ama kazımak gerekiyorsa
...tür siteler sayfanın dibine ulaştığında sitesinden ek içerik istemek için JavaScript kullanıyor. Tek yapmanız gereken bu ek içeriğin URL'sini bulmak ve onu geri alabilirsiniz. Gerekli URL'yi bulmak, komut dosyasını denetleyerek, Firefox Web konsolunu kullanarak veya bir debug proxy kullanarak yapılabilir. Örneğin, Firefox Web Konsolu'nu açın, Net dışındaki tüm filtre düğmelerini kapatın ve kazımak istediğiniz siteyi yükleyin. Tüm dosyaları yüklendikçe göreceksiniz. Web Konsolu'nu izlerken sayfayı kaydırın ve ek istekler için kullanılan URL'leri göreceksiniz. Sonra bu URL'yi kendiniz isteyebilir ve verilerin hangi formatta olduğunu (muhtemelen JSON) görebilir ve Python betiğinize alabilirsiniz.
Lütfen bunu nasıl yapacağınıza dair somut bir örnek verebilir misiniz? – tatsuhirosatou
Biraz daha ayrıntı ekledim, umarım yardımcı olur! – kindall
ajax kaynağının URL'sini bulmak en iyi seçenek olacaktır, ancak belirli siteler için hantal olabilir. Alternatif olarak QWebKit
gibi başsız bir tarayıcıyı PyQt
'dan kullanabilir ve DOM ağacındaki verileri okurken klavye olayları gönderebilirsiniz. QWebKit
, güzel ve basit bir api'ye sahiptir.
Buradaki en iyi bahsiniz, bu sitenin API'lerini kullanmaktır - bu, şimdiye kadar, en kolay ve en güvenilir seçenek olacaktır. Bunun dışında, temel olarak tam bir tarayıcı çalıştıran JavaScript gibi işlemler yapmanız gerekecek - bu tür kütüphaneler var. –
bir benzetim gibi geliyor, jscript'in bazı örneklerini işaret edebilir misiniz –