2009-11-27 15 views
9

SgmlLinkExtractor'ın çalışmasını sağlamaya çalışıyorum. BenScrapy SgmlLinkExtractor soru

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

Yani, ilk url 'http://www.whitecase.com/jacevedo/' ve ben allow=('/aadler',) giren ve beklemek am girmek

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

Sadece Yani allow=()

kullanıyorum:

Bu

imzadır Bu '/aadler/', taranacaktır. Ama bunun yerine, örümcek ilk url tarar ve sonra kapanır:

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

yanlış burada ne yapıyorum? Bu örümceği bitirmemde bana yardımcı olabilecek, Scrapy'i başarıyla kullanan herkes var mı?

yardım için teşekkür ederiz.

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

Not:

aşağıda örümcek için kod içeren SO beni çok gerekli başlangıç ​​url yerine 1'den fazla url sonrası izin vermez. Bunun için üzgünüm.

cevap

10

Sen göründüğü yöntemi "ayrıştırmak". "Ayrıştırma" geçersiz kılma izin bağlantıları takip için kullanılan CrawlSpider özel bir yöntemdir.

+1

bu çizgiyi ifade ediyor.:. geri arama = 'parse' – Zeynel

+0

Evet, "ayrıştırmayı" CrawlSpider Kuralı'nda kullanmayın. –

+0

Ve parse yöntemini "parse_item" olarak değiştirin. – Eduardo

1

= (r '/ aadler /', ...

+1

Tamam" çalışacaktır fakat değişen hiçbir şey hala sadece ilk url tarar – Zeynel

1

sen belgelerini kontrol eğer bir "Uyarı" açıkça yazılır

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

.. tuple olmak "kurallar" için ilk öğeden sonra virgül eksik"Tarama örümcek kurallarını yazarken, Tarama Örneği, mantığını uygulamak için ayrıştırma yönteminin kendisini kullandığı için ayrıştırmayı geri arama olarak kullanmaktan kaçının. . Eğer ayrıştırma yöntemini geçersiz Yani, eğer tarama örümcek artık

url for verification