2012-03-05 7 views
18

मैं अपनी वेबसाइट से किए गए सभी URL स्क्रैप और एक फाइल करने के लिए सूची में लिखने के लिए अजगर Scrapy module उपयोग करना चाहते हैं। मैंने उदाहरणों में देखा लेकिन ऐसा करने के लिए कोई आसान उदाहरण नहीं देखा।मैं अपनी वेबसाइट से सभी URL की सूची बनाना अजगर Scrapy मॉड्यूल का उपयोग करते हैं?

from scrapy.selector import HtmlXPathSelector 
from scrapy.spider import BaseSpider 
from scrapy.http import Request 

DOMAIN = 'example.com' 
URL = 'http://%s' % DOMAIN 

class MySpider(BaseSpider): 
    name = DOMAIN 
    allowed_domains = [DOMAIN] 
    start_urls = [ 
     URL 
    ] 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     for url in hxs.select('//a/@href').extract(): 
      if not (url.startswith('http://') or url.startswith('https://')): 
       url= URL + url 
      print url 
      yield Request(url, callback=self.parse) 

सहेजें इस spider.py नामक एक फाइल में:

+6

StackOverflow एक साइट लोगों को आप के लिए अपने कोड लिखने के लिए पूछने के लिए नहीं है हो सकता है आप जिस विशिष्ट समस्या को चलाते हैं। – Amber

+0

क्या आपने वहां ट्यूटोरियल की कोशिश की है? यह काफी आत्म व्याख्यात्मक है। आप/है, तो/ट्यूटोरियल की कोशिश की और अभी भी समस्या है, कुछ कोड है कि आप पहले (+1 @Amber) – inspectorG4dget

+3

एम्बर, और inspectorG4dget की कोशिश की है पोस्ट करने का प्रयास है, मैं प्रोग्राम है जो ऐसा करता है लिखा था, लेकिन अभी तक यह पोस्ट नहीं कर सकते क्योंकि मेरे पास पर्याप्त प्रतिष्ठा नहीं है - एक प्रतीक्षा समय है। मैं कल सुबह समाधान पोस्ट करूंगा। –

उत्तर

40

यहाँ अजगर प्रोग्राम है जो मेरे लिए काम किया है।

इसके बाद आप प्रक्रिया इस पाठ पोस्ट करने के लिए एक खोल पाइप लाइन का उपयोग कर सकते हैं:

bash$ scrapy runspider spider.py > urls.out 
bash$ cat urls.out| grep 'example.com' |sort |uniq |grep -v '#' |grep -v 'mailto' > example.urls 

यह मैं अपनी साइट में सभी अद्वितीय URL की एक सूची देता है। * कुछ कोशिश * और फिर आ एक के बारे में एक सवाल पूछ -

+2

यह अच्छा है। आपको जवाब मिल गया है। अब आगे जाना है और जवाब को स्वीकार ... और, ओह, हाँ, वहाँ एक "स्व लर्नर" आप के लिए इंतज़ार बिल्ला हो सकता है। :) – Nishant

+0

इस कार्यक्रम में एक छोटी सी बग है। लाइन 'अगर url.startswith नहीं ('http: //'):' https लिंक सही ढंग से संभाल नहीं होंगे। –

+0

@JoshuaSnider मैंने इसे अपडेट किया। लेकिन इस नमूना कोड का एक लघु स्निपेट है, इसलिए यह सभी स्थितियों के लिए अधिकृत नहीं मतलब नहीं है। –

12

कुछ क्लीनर (और शायद अधिक उपयोगी) का उपयोग कर LinkExtractor

from scrapy.linkextractors import LinkExtractor 

    def parse(self, response): 
     le = LinkExtractor() # empty for getting everything, check different options on documentation 
     for link in le.extract_links(response): 
      yield Request(link.url, callback=self.parse) 
+0

क्या यह वेबसाइट या बाहरी के अंदर भी रिटर्न लिंक करता है? –

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