2014-02-17 47 views
0

我試圖建立使用Scrapy一個蜘蛛的WebCrawler,我已經設置了一個規則我希望我的履帶回暖使用正則表達式的鏈接:Scrapy sqmllinkextractor規則改變的URL

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

我檢查正則表達式和它的工作原理,它匹配我想蜘蛛抓取的鏈接,但是當我運行程序時,蜘蛛沒有找到任何物品,並且檢查了一下,發現當正則表達式正確匹配物品時,當蜘蛛走抓取頁面的網址,它使用的是不同的,應該是。

例如,蜘蛛應該匹配和抓取網址如

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 

但網址scrapy爬網出來像

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= 

這些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

這些URL不規範我的類代碼,你可以告訴SGML提取不規範化他們,像解決這個問題:

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

這裏是你如何與scrapy工作外殼找出來:

$ 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

謝謝,這很好,謝謝你的shell測試! – ConnorU