2010-02-03 6 views
15

के साथ स्क्रीन स्क्रैपिंग क्या पाइथन में स्क्रीन स्क्रैपिंग लाइब्रेरीज़ हैं जो जावास्क्रिप्ट समर्थन प्रदान करते हैं?पायथन

मैं साधारण HTML अनुरोधों के लिए pycurl का उपयोग किया गया है, और जावास्क्रिप्ट समर्थन की आवश्यकता होती है और अधिक जटिल अनुरोधों के लिए जावा के HtmlUnit

आदर्श रूप से मैं पाइथन से सब कुछ करने में सक्षम होना चाहता हूं, लेकिन मैं किसी भी पुस्तकालय में नहीं आया हूं जो मुझे ऐसा करने की अनुमति देगा। क्या वे मौजूद हैं?

+4

इसी तरह के सवाल यहां पर सहायक उत्तरों के बहुत सारे:

यहाँ वेबकिट द्वारा प्रदान की गई एक वेब पेज को डाउनलोड करने और XPath का उपयोग कर शीर्षक तत्व को निकालने के लिए एक सरल उदाहरण (ऊपर URL से लिया गया) है http://stackoverflow.com/search?q=scraping+python – 3zzy

+1

सटीक डुप्लिकेट: http://stackoverflow.com/questions/2081586/web-scraping-with-python –

+0

कोई सटीक डुप्लिकेट नहीं है। यह जावास्क्रिप्ट का उल्लेख करता है, जिसमें स्थिर HTML के साथ काम करते समय विभिन्न टूल की आवश्यकता होती है। – hoju

उत्तर

12

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

import sys 
import signal 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4.QtWebKit import QWebPage 

class Render(QWebPage): 
    def __init__(self, url): 
     self.app = QApplication(sys.argv) 
     QWebPage.__init__(self) 
     self.html = None 
     signal.signal(signal.SIGINT, signal.SIG_DFL) 
     self.connect(self, SIGNAL('loadFinished(bool)'), self._finished_loading) 
     self.mainFrame().load(QUrl(url)) 
     self.app.exec_() 

    def _finished_loading(self, result): 
     self.html = self.mainFrame().toHtml() 
     self.app.quit() 


if __name__ == '__main__': 
    try: 
     url = sys.argv[1] 
    except IndexError: 
     print 'Usage: %s url' % sys.argv[0] 
    else: 
     javascript_html = Render(url).html 
+0

प्लूमो - एक वेबसाइट को स्क्रैप करने के लिए इस कोड का उपयोग करने का प्रयास कर रहा हूं लेकिन यह सुनिश्चित नहीं है कि इसे वापस आने के बाद 'javascript_html' चर के साथ क्या करना है। 'प्रिंट javsascript_html' त्रुटि देता है' यूनिकोड एन्कोड त्रुटि: 'ascii' कोडेक स्थिति 4200 में अक्षर \ '2020' को एन्कोड नहीं कर सकता: क्रमशः श्रेणी में नहीं (128) '। कृपया सहायता कीजिए! :) – significance

+0

जो एक यूनिकोड त्रुटि है – hoju

+0

मैं इसे पायथन 3 के साथ कोशिश कर रहा हूं, लेकिन प्रस्तुत एचटीएमएल में जावास्क्रिप्ट संसाधित नहीं है। यहां कोड है: [लिंक] (http://pastebin.com/vzX9p7jv) – karmapolice

-2

मुझे इसके लिए कुछ भी नहीं मिला है। मैं सुंदरसप और कस्टम दिनचर्या के संयोजन का उपयोग करता हूं ...

0

आप spidermonkey को आजमा सकते हैं?

This Python module allows for the implementation of Javascript? classes, objects and functions in Python, as well as the evaluation and calling of Javascript scripts and functions. It borrows heavily from Claes Jacobssen's Javascript Perl module, which in turn is based on Mozilla's PerlConnect Perl binding.

+0

स्पाइडरमॉन्की स्क्रैप स्क्रीन नहीं करता है। – bdd

11

Beautiful soup अभी भी शायद अपने सबसे अच्छे शर्त है।

यदि आपको अजाक्स अनुरोधों को रोकने के उद्देश्य से "जावास्क्रिप्ट समर्थन" की आवश्यकता है तो आपको उन अनुरोधों की निगरानी करने के लिए कुछ प्रकार के कैप्चर (जैसे YATT) का उपयोग करना चाहिए, और फिर उन्हें अनुकरण/विश्लेषण करना चाहिए।

यदि आपको स्थिर जावास्क्रिप्ट वाले किसी पृष्ठ का अंतिम परिणाम देखने में सक्षम होने के लिए "जावास्क्रिप्ट समर्थन" की आवश्यकता है, तो मेरी पहली पसंद यह होगी कि जावास्क्रिप्ट किसी मामले पर क्या कर रहा है- उप-मामले के आधार पर (उदाहरण के लिए यदि जावास्क्रिप्ट कुछ एक्सएमएल के आधार पर कुछ कर रहा है, तो बस इसके बजाय एक्सएमएल को सीधे पार्स करें)

यदि आप वास्तव में "जावास्क्रिप्ट समर्थन" चाहते हैं (जैसा कि आप देखना चाहते हैं कि HTML स्क्रिप्ट के बाद क्या है एक पृष्ठ पर चलाया गया है) तो मुझे लगता है कि आपको शायद कुछ ब्राउज़र नियंत्रण का एक उदाहरण बनाने की आवश्यकता होगी, और इसके बाद परिणामी एचटीएमएल/डोम को ब्राउजर कंट्रोल से वापस लोड करने के बाद पढ़ें और सामान्य सूप के साथ इसे सामान्य रूप से पार्स करें। हालांकि यह मेरा आखिरी उपाय होगा।

+1

जबकि सुंदर सूप 'स्थैतिक' एचटीएमएल मार्कअप के साथ खूबसूरती से काम करता है जो सर्वर से 'as-is' आता है, यह एकल-पेज शैली एजेक्सी वेब ऐप्स के साथ बुरी तरह विफल हो जाएगा जो जावास्क्रिप्ट और XMLHttpRequests के माध्यम से अपनी सामग्री को गतिशील रूप से उत्पन्न करता है। वेब साइट स्क्रैपिंग को रोकने के लिए सत्र स्थिति और नेविगेशन को बनाए रखने के लिए जावास्क्रिप्ट पर भरोसा करने वाली साइटों पर भी असफल हो जाएगा। – ccpizza

4

Scrapy is a fast high-level screen scraping and web crawling framework, used to crawl websites and extract structured data from their pages. It can be used for a wide range of purposes, from data mining to monitoring and automated testing.

ये रहा: http://scrapy.org/

3

Selenium शायद? यह आपको पायथन (अन्य भाषाओं के बीच) का उपयोग करके एक वास्तविक ब्राउज़र (फ़ायरफ़ॉक्स, आईई, सफारी) स्वचालित करने की अनुमति देता है। यह वेबसाइटों का परीक्षण करने के लिए है, लेकिन ऐसा लगता है कि यह स्क्रैपिंग के लिए भी प्रयोग योग्य होना चाहिए। (अस्वीकरण: इसे कभी भी इस्तेमाल नहीं किया गया)

1

Webscraping लाइब्रेरी PyQt4 WebView को एक सरल और उपयोग में आसान API में लपेटती है।

from webscraping import download, xpath 
D = download.Download() 
# download and cache the Google Code webpage 
html = D.get('http://code.google.com/p/webscraping') 
# use xpath to extract the project title 
print xpath.get(html, '//div[@id="pname"]/a/span')