2012-12-06 96 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'在輸出也是固定的。 –

相關問題