2014-03-01 81 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时,你通常会遇到错误。 –