2014-03-01 78 views
-1

我CrawlSpider:Scrapy不產生鏈接正確

class FabulousFoxSpider(CrawlSpider): 
    """docstring for EventsSpider""" 
    name="fabulousfox" 
    allowed_domains=["fabulousfox.com"] 
    start_urls=["http://www.fabulousfox.com"] 
    rules = (
     Rule(SgmlLinkExtractor(
      allow=(
       '/shows_page_(single|multi).aspx\?usID=(\d)*' 
       ), 
      unique=True), 
      'parse_fabulousfox', 
      ), 
     ) 

但是當我做scrapy crawl fabulousfox -o data.json -t json

我得到的輸出:

................... 
...................... 
2014-03-01 13:11:56+0530 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:6023 
2014-03-01 13:11:56+0530 [scrapy] DEBUG: Web service listening on 0.0.0.0:6080 
2014-03-01 13:11:57+0530 [fabulousfox] DEBUG: Crawled (200) <GET http://www.fabulousfox.com> (referer: None) 
2014-03-01 13:11:57+0530 [fabulousfox] DEBUG: Crawled (403) <GET http://www.fabulousfox.com/../shows_page_multi.aspx?usID=365> (referer: http://www.fabulousfox.com) 
2014-03-01 13:11:58+0530 [fabulousfox] DEBUG: Crawled (403) <GET http://www.fabulousfox.com/../shows_page_single.aspx?usID=389> (referer: http://www.fabulousfox.com) 
2014-03-01 13:11:58+0530 [fabulousfox] DEBUG: Crawled (403) <GET http://www.fabulousfox.com/../shows_page_multi.aspx?usID=388> (referer: http://www.fabulousfox.com) 
2014-03-01 13:11:58+0530 [fabulousfox] DEBUG: Crawled (403) <GET http://www.fabulousfox.com/../shows_page_single.aspx?usID=394> (referer: http://www.fabulousfox.com) 
2014-03-01 13:11:58+0530 [fabulousfox] DEBUG: Crawled (403) <GET http://www.fabulousfox.com/../shows_page_multi.aspx?usID=358> (referer: http://www.fabulousfox.com) 
2014-03-01 13:11:58+0530 [fabulousfox] INFO: Closing spider (finished) 
2014-03-01 13:11:58+0530 [fabulousfox] INFO: Dumping Scrapy stats: 
    {'downloader/request_bytes': 1660, 
    'downloader/request_count': 6, 
    'downloader/request_method_count/GET': 6, 
    'downloader/response_bytes': 12840, 
    'downloader/response_count': 6, 
    'downloader/response_status_count/200': 1, 
    'downloader/response_status_count/403': 5, 
    'finish_reason': 'finished', 
    'finish_time': datetime.datetime(2014, 3, 1, 7, 41, 58, 218296), 
    'log_count/DEBUG': 8, 
    'log_count/INFO': 7, 
    'memdebug/gc_garbage_count': 0, 
    'memdebug/live_refs/FabulousFoxSpider': 1, 
    'memusage/max': 33275904, 
    'memusage/startup': 33275904, 
    'request_depth_max': 1, 
    'response_received_count': 6, 
    'scheduler/dequeued': 6, 
    'scheduler/dequeued/memory': 6, 
    'scheduler/enqueued': 6, 
    'scheduler/enqueued/memory': 6, 
    'start_time': datetime.datetime(2014, 3, 1, 7, 41, 56, 360266)} 
2014-03-01 13:11:58+0530 [fabulousfox] INFO: Spider closed (finished) 

爲什麼的生成的URL包含...
http://www.fabulousfox.com/../shows_page_multi.aspx?usID=365

另外它不會生成所有的網址。這裏有什麼問題?

+0

我遇到Scrapy'的'新版本相同的問題。 – 2014-03-01 07:48:41

+0

我懷疑它與Scrapy版本有什麼關係。 – mrudult

+0

[Python Scrapy:將相對路徑轉換爲絕對路徑]可能的重複(http://stackoverflow.com/questions/6499603/python-scrapy-convert-relative-paths-to-absolute-paths) –

回答

1

檢查網頁的HTML源代碼http://www.fabulousfox.com你注意到錶行這樣的:

<tr> 
    <td width="7"> 
     <img src="images/home_shows_frame_left.jpg" width="7" height="128" /> 
    </td> 
    <td width="155" height="128" align="center" valign="middle"> 
     <a id="Box4" href="../shows_page_single.aspx?usID=394"><img id="Image4" src="../images/ShowLogos/394.jpg" alt="Rickey Smiley's" style="border-width:0px;" /></a> 
    </td> 
    <td width="7" align="right"> 
     <img src="images/home_shows_frame_right.jpg" width="7" height="128" /> 
    </td> 
</tr> 

雖然瀏覽器會理解這些聯繫,並帶領你http://www.fabulousfox.com/shows_page_single.aspx?usID=394,Scrapy的SgmlLinkExtractor將使用urlparse.urljoin()內部:

>>> import urlparse 
>>> urlparse.urljoin('http://www.fabulousfox.com/', '../shows_page_single.aspx?usID=394') 
'http://www.fabulousfox.com/../shows_page_single.aspx?usID=394' 
>>> 

您可以通過提供可調用的process_value來幫助鏈接提取器,

SgmlLinkExtractor(process_value=lambda u: u.replace('../', '/')) 

,但它可能不會做你想做的所有情況下

+0

但是從哪裏來的主要點呢?他們爲什麼在那裏? – mrudult

+0

它們位於網頁的HTML頁面中。 –

+0

我弄錯了。沒有仔細看過網址。不管怎麼說,多謝拉。 – mrudult

0

您不能正確處理相對鏈接。

使用urlparse.urljoin構建有效的鏈接。

+0

我沒有得到爲什麼我需要這樣做?我寫了一個爬行程序,它在上面做了同樣的事情,但是在scrapy的舊版本中。那裏沒有任何問題。 – mrudult

+0

我不想將鏈接從相對鏈接轉換爲絕對鏈接,反之亦然。就是這樣,沒有一個網址被抓取,甚至沒有一個網址被抓取。 – mrudult

+0

抓取起始之一(代碼200 =成功),但所有其他代碼都不正確,從而產生錯誤代碼。當你訪問一個不正確的URL時,你通常會遇到錯誤。 –