2013-03-19 10 views
10

मैं पूरी वेबसाइट को क्रॉल करने में असमर्थ हूं, स्केपर बस सतह पर क्रॉल करता है, मैं गहराई से क्रॉल करना चाहता हूं। पिछले 5-6 बजे के लिए googling और कोई मदद नहीं किया गया। नीचे मेरा कोड:स्क्रैप - पूरी वेबसाइट क्रॉल करें

from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.selector import HtmlXPathSelector 
from scrapy.item import Item 
from scrapy.spider import BaseSpider 
from scrapy import log 

class ExampleSpider(CrawlSpider): 
    name = "example.com" 
    allowed_domains = ["example.com"] 
    start_urls = ["http://www.example.com/"] 
    rules = [Rule(SgmlLinkExtractor(allow=()), 
        follow=True), 
      Rule(SgmlLinkExtractor(allow=()), callback='parse_item') 
    ] 
    def parse_item(self,response): 
     self.log('A response from %s just arrived!' % response.url) 

कृपया मदद करें !!!!

धन्यवाद, अभिराम

+1

बस स्टैक ओवरफ्लो के खिलाफ अपना कोड आजमाया - मेरा आईपी प्रतिबंधित हो गया। यह निश्चित रूप से काम करता है! :) – alecxe

+0

@Alexander - मुझे और अधिक डीबग करने के लिए प्रोत्साहित करता है :) :) ... आईपी प्रतिबंध साथी पर खेद है! –

+0

क्या आप वास्तव में example.com को क्रॉल करने का प्रयास कर रहे हैं? आप जानते हैं कि यह वास्तविक वेबसाइट नहीं है। –

उत्तर

6

नियम शॉर्ट सर्किट, जिसका अर्थ है पहला नियम है कि एक लिंक को संतुष्ट करता है नियम है कि लागू किया जाता है हो जाएगा, (कॉलबैक के साथ) अपने दूसरे नियम बुलाया नहीं किया जाएगा।

यह करने के लिए अपने नियम बदलें:

rules = [Rule(SgmlLinkExtractor(), callback='parse_item', follow=True)] 
+0

@ सभी - यह काम कर रहा है ... स्टीवन सही था और मदद के लिए धन्यवाद! लेकिन मैं पूरी साइट को क्रॉल करने में असमर्थ हूं, बस कुछ 80 विषम पृष्ठों को क्रॉल करने में सक्षम हूं .. कुछ भी जिसे सही करने की आवश्यकता है? यहां मेरा कामकाजी संस्करण है: (नियम (SgmlLinkExtractor (अनुमति = ('पृष्ठ /')), फ़ॉलो करें = सही, कॉलबैक = 'parse_item'), –

+0

हाय! क्या आप इस पर मदद दे रहे हैं? http: //stackoverflow.com/questions/31630771/scrapy-linkextractor- डुप्लिकेटिंग – yukclam9

+0

@ स्टीवन अल्मेरोथ हाय स्टीवन क्या आप इस http://stackoverflow.com/questions/37717122/grabbed में मदद कर सकते हैं -डेटा-से-ए-दी गई-यूआरएल-एंड-पुट-इन-ए-फाइल-उपयोग-स्केपर मैंने नियम में बदलावों के साथ प्रयास किया लेकिन यह मेरे लिए काम नहीं करता था। – nand

2

जब start_urls पार्स करने, गहरी यूआरएल टैग href से पार्स किया जा सकता। फिर, parse() फ़ंक्शन में गहन अनुरोध प्राप्त किया जा सकता है। Here is a simple example। सबसे महत्वपूर्ण स्रोत कोड नीचे दिखाया गया है:

from scrapy.spiders import Spider 
from tutsplus.items import TutsplusItem 
from scrapy.http import Request 
import re 

class MySpider(Spider): 
    name   = "tutsplus" 
    allowed_domains = ["code.tutsplus.com"] 
    start_urls  = ["http://code.tutsplus.com/"] 

    def parse(self, response): 
     links = response.xpath('//a/@href').extract() 

     # We stored already crawled links in this list 
     crawledLinks = [] 

     # Pattern to check proper link 
     # I only want to get tutorial posts 
     linkPattern = re.compile("^\/tutorials\?page=\d+") 

     for link in links: 
     # If it is a proper link and is not checked yet, yield it to the Spider 
      if linkPattern.match(link) and not link in crawledLinks: 
       link = "http://code.tutsplus.com" + link 
       crawledLinks.append(link) 
       yield Request(link, self.parse) 

     titles = response.xpath('//a[contains(@class, "posts__post-title")]/h1/text()').extract() 
     for title in titles: 
      item = TutsplusItem() 
      item["title"] = title 
      yield item 
संबंधित मुद्दे