2014-02-17 2 views
0

내가 Scrapy 사용하여 webcrawler 거미를 구축하기 위해 노력하고있어 변경하고 나는 내 크롤러가 정규식 사용하여 선택하려는 링크에 대한 규칙을 설정 한 :Scrapy의 sqmllinkextractor 규칙은 URL을

rules = (Rule(SgmlLinkExtractor(allow='http\:\/\/www\.cartelera\.com\.uy\/apeliculafunciones\.aspx\?[^"]*1&29'), 'parse_loly', follow=True,),) 

내가 확인을 정규식과 그것이 작동하고 그것이 거미가 크롤 링을 원하는 링크를 일치하지만, 내가 거미가 항목을 발견하고 작은 검사와 함께 정규식이 항목을 올바르게 일치하는 동안, 거미가 간다 사용하는 URL이 틀린 페이지를 크롤링하는 것입니다.

예를 들어, 거미 일치 및

http://www.cartelera.com.uy/apeliculafunciones.aspx?7242&&CINE&OBRA&-1&29 
http://www.cartelera.com.uy/apeliculafunciones.aspx?10704&&CINE&OBRA&-1&29 
http://www.cartelera.com.uy/apeliculafunciones.aspx?10697&&CINE&OBRA&-1&29 

로 URL을 크롤링 그러나 URL을의 scrapy는이 URL을 분명히 때문에, 어떤 항목을 페이지에 오류가 없습니다 이어질

http://www.cartelera.com.uy/apeliculafunciones.aspx?-1=&29=&7242=&CINE=&OBRA= 
http://www.cartelera.com.uy/apeliculafunciones.aspx?-1=&29=&10704=&CINE=&OBRA= 
http://www.cartelera.com.uy/apeliculafunciones.aspx?-1=&29=&10697=&CINE=&OBRA= 

처럼 나올 크롤한다 찾을 수 있습니다.

오류 메시지가 없습니다 왜 이런 일이 일어나고 어떻게 피할 수 있습니까? 여기 당신이 scrapy 작업 방법

SgmlLinkExtractor(allow='http...', canonicalize=False) 

: 해당 URL은 표준 없습니다

class MySpider(CrawlSpider): 
    name = 'cartelera' 
    allowed_domains = ["www.cartelera.com.uy"] 
    start_urls = ["http://www2.cartelera.com.uy/apeliculafunciones.aspx?,,PELICULAS,OBRA,0,26"] 

    rules = (Rule(SgmlLinkExtractor(allow='http\:\/\/www\.cartelera\.com\.uy\/apeliculafunciones\.aspx\?[^"]*1&29'), 'parse_loly', follow=True,),) 

##simple debugging method to output and check the crawled urls 
def parse_loly(self, response): 
print '%s' % response.url 
return 

답변

3

아래에있는 내 클래스 코드를 붙여

, 당신은 같이 그들을 정규화하지 SGML 추출기를 말함으로써이 문제를 극복 할 수있다 쉘을 찾으려면 다음을 입력하십시오 :

$ scrapy shell "http://www2.cartelera.com.uy/apeliculafunciones.aspx?,,PELICULAS,OBRA,0,26" 
... 
>>> from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
>>> s = SgmlLinkExtractor(allow='http\:\/\/www\.cartelera\.com\.uy\/apeliculafunciones\.aspx\?[^"]*1&29', canonicalize=False) 
>>> for link in s.extract_links(response): 
...  print link 
... 
Link(url='http://www.cartelera.com.uy/apeliculafunciones.aspx?10697&&CINE&OBRA&-1&29', text=u'', fragment='', nofollow=False) 
Link(url='http://www.cartelera.com.uy/apeliculafunciones.aspx?10697&&CINE&OBRA&-1&29#titulosalas', text=u'aqu\xed', fragment='', nofollow=False) 
Link(url='http://www.cartelera.com.uy/apeliculafunciones.aspx?10795&&CINE&OBRA&-1&29', text=u'', fragment='', nofollow=False) 
... 
+0

감사합니다. 쉘 테스트를 해 주셔서 감사합니다. – ConnorU