2012-12-06 88 views
5

我的第一个问题在这里:)尝试使用scrapy检索网页的所有链接。但我不能输出页面上的链接

我试图抓取我的学校网站的所有可能的网页有。但我无法将链接导入到文本文件中。我有正确的权限,所以这不是问题。

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 scrapy.spider import BaseSpider 

class hsleidenSpider(CrawlSpider): 
     name = "hsleiden1" 
     allowed_domains = ["hsleiden.nl"] 
     start_urls = ["http://hsleiden.nl"] 

     # allow=() is used to match all links 
     rules = [ 
     Rule(SgmlLinkExtractor(allow=()), follow=True), 
     Rule(SgmlLinkExtractor(allow=()), callback='parse_item') 
     ] 

     def parse_item(self, response): 
       x = HtmlXPathSelector(response) 

       filename = "hsleiden-output.txt" 
       open(filename, 'ab').write(response.url) 

所以我只在hsleiden.nl页面上扫描。我想将response.url放入文本文件hsleiden-output.txt中。

有什么办法可以做到这一点吗?

+0

请具体说明您的问题。你期望发生什么?发生了什么呢? – Sheena

+0

如果我想借用你的代码,我怎么称呼它? –

回答

1

参照CrawlSpider的文档,如果多个规则匹配相同的链接,那么只有第一个将被使用。

因此,由于重定向,使用第一条规则会导致看起来无限循环。由于第二条规则被忽略,所有匹配链接都不会传递给parse_item回调,这意味着没有输出文件。

有些调查需要解决的问题重定向(和修改的第一条规则,使其不与第二次交锋),但注释掉它完全会产生链接,像这样的输出文件:

http://www.hsleiden.nl/activiteitenkalenderhttp://www.hsleiden.nlhttp://www.hsleiden.nl/vind-je-studie/proefstuderenhttp://www.hsleiden.nl/studiumgenerale

在一行上他们都被改写的在一起,所以你可能要在每次写入到输出文件时,添加一个换行符或分隔。

+0

Thx伙伴,适合我。你的解决方案'\ n'在输出也是固定的。 –

相关问题