2009-11-27 13 views
9

मैं SgmlLinkExtractor को काम करने की कोशिश कर रहा हूं। , मैं प्रवेशस्केपर SgmlLinkExtractor प्रश्न

rules = (Rule(SgmlLinkExtractor(allow=("/aadler/",)), callback='parse'),) 

तो, प्रारंभिक यूआरएल 'http://www.whitecase.com/jacevedo/' है और मैं allow=('/aadler',) प्रवेश कर रहा हूँ और उम्मीद

SgmlLinkExtractor(allow=(), deny=(), allow_domains=(), deny_domains=(), restrict_xpaths(), tags=('a', 'area'), attrs=('href'), canonicalize=True, unique=True, process_value=None) 

मैं सिर्फ allow=()

तो उपयोग कर रहा हूँ:

यह हस्ताक्षर है कि '/aadler/' स्कैन भी किया जाएगा। लेकिन इसके बजाय, मकड़ी प्रारंभिक यूआरएल स्कैन करता है और फिर बंद हो जाता है:

[wcase] INFO: Domain opened 
[wcase] DEBUG: Crawled </jacevedo/> (referer: <None>) 
[wcase] INFO: Passed NuItem(school=[u'JD, ', u'Columbia Law School, Harlan Fiske Stone Scholar, Parker School Recognition of Achievement in International and Foreign Law, ', u'2005']) 
[wcase] INFO: Closing domain (finished) 

मैं यहां क्या गलत कर रहा हूं?

क्या कोई यहां है जो स्केपर का सफलतापूर्वक उपयोग करता है जो इस मकड़ी को खत्म करने में मेरी मदद कर सकता है?

सहायता के लिए धन्यवाद।

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 Nu.items import NuItem 
from urls import u 

class NuSpider(CrawlSpider): 
    domain_name = "wcase" 
    start_urls = ['xxxxxx/jacevedo/'] 

    rules = (Rule(SgmlLinkExtractor(allow=("/aadler/",)), callback='parse'),) 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 

     item = NuItem() 
     item['school'] = hxs.select('//td[@class="mainColumnTDa"]').re('(?<=(JD,\s))(.*?)(\d+)') 
     return item 

SPIDER = NuSpider() 

नोट::

मैं नीचे मकड़ी के लिए कोड शामिल तो मेरे पोस्ट 1 से अधिक यूआरएल इसलिए प्रारंभिक यूआरएल के रूप में आवश्यक विकल्प नहीं दूँगा। उसके लिए माफ़ करना।

उत्तर

10

आप "पार्स" विधि यह प्रतीत होता है। "पार्स" अधिभावी कर रहे हैं, एक निजी विधि CrawlSpider में लिंक का पालन करने के लिए प्रयोग किया जाता है।

+1

आप इस लाइन का मतलब है:।।। कॉलबैक = 'पार्स' – Zeynel

+0

हां। अपने क्रॉलस्पीडर नियम में कॉलबैक "पार्स" का उपयोग न करें। –

+0

और अपनी 'पार्स' विधि को 'parse_item' के रूप में बदलें – Eduardo

1

अनुमति देते हैं = (आर '/ aadler /', ...

+1

ठीक है, लेकिन कुछ भी नहीं बदला फिर भी केवल प्रारंभिक यूआरएल क्रॉल करता है – Zeynel

1

आप "नियम" के लिए पहला तत्व के बाद अल्पविराम याद कर रहे हैं एक टपल होने के लिए ..

rules = (Rule(SgmlLinkExtractor(allow=('/careers/n.\w+',)), callback='parse', follow=True),) 
3

अगर आप प्रलेखन जाँच एक "चेतावनी" स्पष्ट रूप से लिखा है

"जब क्रॉल स्पाइडर नियम लिखते हैं, तो कॉलबैक के रूप में पार्स का उपयोग करने से बचें, क्योंकि क्रॉल स्पाइडर अपने तर्क को लागू करने के लिए पार्स विधि का उपयोग करता है। तो अगर आप पार्स विधि ओवरराइड, क्रॉल मकड़ी अब कार्य नहीं करेगा "

url for verification

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