2012-09-20 17 views
25

मैंने कई स्क्रैपर्स लिखे हैं लेकिन मुझे सचमुच यकीन नहीं है कि अनंत स्क्रॉलर्स को कैसे संभालना है। इन दिनों अधिकांश वेबसाइट इत्यादि, फेसबुक, Pinterest में अनंत स्क्रोलर हैं।असीमित स्क्रॉलिंग के साथ स्क्रैप वेबसाइट

+2

यहां आपकी सबसे अच्छी शर्त उन साइट के एपीआई का उपयोग करना है - जो अब तक का सबसे आसान और सबसे विश्वसनीय विकल्प होगा। इसके अलावा, आपको जावास्क्रिप्ट को संसाधित करना होगा, जिसका मूल रूप से एक पूर्ण ब्राउज़र चलाना है - ऐसे पुस्तकालय मौजूद हैं। –

+0

सिमुलेशन की तरह लगता है, क्या आप jscript –

उत्तर

24

आप ट्विटर या फेसबुक जैसी अनंत स्क्रॉलिंग वेबसाइट को स्क्रैप करने के लिए सेलेनियम का उपयोग कर सकते हैं।

चरण 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 + "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() 

चरण 3 निकालें: डेटा प्रिंट यदि आवश्यक हो।

+0

क्या लूप का मतलब है कि हम 100 बार नीचे स्क्रॉल करते हैं? जहां 100 यादृच्छिक रूप से चुनी गई संख्या है। क्या वह सही है? –

+0

@satarupa आप सही हैं लूप 100 बार नीचे स्क्रॉल करना है –

20

असीमित स्क्रॉलिंग (लेटीवेयर नोट्स के रूप में) की अधिकांश साइटें एक उचित एपीआई भी होती हैं, और आपको स्क्रैपिंग के बजाय इसका उपयोग करके बेहतर सेवा दी जाएगी।

लेकिन अगर आप को स्क्रैप करना होगा ...

ऐसी साइटों साइट से अतिरिक्त सामग्री का अनुरोध करने के लिए जब आप पृष्ठ के नीचे तक पहुँचने जावास्क्रिप्ट का उपयोग कर रहे हैं। आपको बस इतना करना है कि उस अतिरिक्त सामग्री के यूआरएल को समझें और आप इसे पुनः प्राप्त कर सकते हैं। आवश्यक यूआरएल को चित्रित करना, फ़ायरफ़ॉक्स वेब कंसोल का उपयोग करके, या debug proxy का उपयोग करके स्क्रिप्ट का निरीक्षण करके किया जा सकता है।

उदाहरण के लिए, फ़ायरफ़ॉक्स वेब कंसोल खोलें, नेट को छोड़कर सभी फ़िल्टर बटन बंद करें, और उस साइट को लोड करें जिसे आप स्क्रैप करना चाहते हैं। आप लोड की गई सभी फाइलें देखेंगे। वेब कंसोल देखते समय पृष्ठ को स्क्रॉल करें और आप अतिरिक्त अनुरोधों के लिए उपयोग किए जा रहे यूआरएल देखेंगे। फिर आप उस यूआरएल का खुद से अनुरोध कर सकते हैं और देख सकते हैं कि डेटा किस प्रारूप में है (शायद जेएसओएन) और इसे अपनी पायथन स्क्रिप्ट में प्राप्त करें।

+0

को संभालने के कुछ उदाहरणों की ओर इशारा कर सकते हैं क्या आप इसे कैसे करना है इसका एक ठोस उदाहरण दे सकते हैं? – tatsuhirosatou

+0

मैंने कुछ और विवरण जोड़ा है, उम्मीद है कि यह मदद करता है! – kindall

1

AJAX स्रोत का यूआरएल ढूँढना सबसे अच्छा विकल्प होगा लेकिन यह कुछ साइटों के लिए बोझिल हो सकता है। वैकल्पिक रूप से आप QWebKitPyQt से एक हेडलेस ब्राउज़र का उपयोग कर सकते हैं और डोम पेड़ से डेटा पढ़ने के दौरान कीबोर्ड ईवेंट भेज सकते हैं। QWebKit में एक अच्छा और सरल एपीआई है।

संबंधित मुद्दे