2009-11-27 12 views
9

Próbuję zrobić SgmlLinkExtractor do pracy.Scrapy SgmlLinkExtractor pytanie

To jest podpis:

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

jestem po prostu za pomocą allow=()

Więc wchodzę

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

więc początkowe url jest 'http://www.whitecase.com/jacevedo/' i jestem wprowadzając allow=('/aadler',) i oczekują zostanie również zeskanowany skaner '/aadler/'. Zamiast tego pająk skanuje początkowy adres URL, a następnie zamyka:

[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) 

Co ja tu robię źle?

Czy jest ktoś, kto z powodzeniem użył Scrapy, który może mi pomóc zakończyć ten pająk?

Dziękuję za pomoc.

I to kod poniżej pająka:

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() 

Uwaga: SO nie pozwoli mi opublikować więcej niż 1 url więc zastąpić początkowy adres URL jako niezbędne. Przepraszam za to.

Odpowiedz

10

jesteś przesłanianie "analizować" metoda wydaje. "Parse" to prywatna metoda CrawlSpider wykorzystywane do linków.

+1

Czy oznacza to wiersz:... zwrotnego = "parsuj" – Zeynel

+0

Tak, nie używaj wywołania zwrotnego "parsuj" w regule CrawlSpider –

+0

I zmień metodę 'parsowania' na' parse_item' – Eduardo

1

pozwalają = (R/aadler/', ...

+1

ok, ale nic się nie zmieniło Nadal indeksuje tylko początkowy adres URL – Zeynel

1

brakuje przecinka po pierwszym elementem „zasady” za krotka ..

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

sprawdzając dokumentację A „Ostrzeżenie” jest wyraźnie napisane

"Podczas pisania reguł pająków indeksujących należy unikać stosowania analizy składniowej jako wywołania zwrotnego, ponieważ program Spider Crawl korzysta z samej metody parsowania w celu implementacji jej logiki. Więc jeśli zastąpić metodę parse, kraul pająk nie będzie już pracować „

url for verification