2012-12-06 16 views
5

Moje pierwsze pytanie tutaj :)Próba zaindeksowania wszystkich linków strony za pomocą scrapy. Ale nie mogę wypisać linków na stronie

Próbowałem zaindeksować moją stronę szkolną pod kątem wszystkich możliwych stron internetowych. Ale nie mogę umieścić linków w pliku tekstowym. Mam odpowiednie uprawnienia, więc to nie jest problem.

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) 

Dlatego skanuję tylko stronę hsleiden.nl. I chciałbym mieć plik response.url do pliku tekstowego hsleiden-output.txt.

Czy jest jakiś sposób, aby to zrobić dobrze?

+0

proszę opisać konkretny problem. Czego oczekujesz? Co się dzieje? – Sheena

+0

Gdybym chciał pożyczyć twój kod, jak mógłbym to nazwać? –

Odpowiedz

1

W odniesieniu do dokumentacji dla CrawlSpider, jeśli wiele reguł pasuje do tego samego łącza, zostanie użyte tylko pierwsze.

Tak więc, w wyniku przekierowań, użycie pierwszej reguły powoduje powstanie nieskończonej pętli. Ponieważ druga reguła jest ignorowana, żaden z pasujących odnośników nigdy nie jest przekazywany do wywołania zwrotnego parse_item, co oznacza brak pliku wyjściowego.

Niektóre dochodzenie jest wymagane, aby rozwiązać ten problem przekierowania (i zmodyfikować pierwszą regułę tak, aby nie kolidować z drugim), ale komentując go w całości będzie produkować plik wyjściowy łączy tak:

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

itp

wszyscy zostali munged razem w jednej linii, więc może chcesz dodać znak nowego wiersza lub separatorów za każdym razem pisać do pliku wyjściowego.

+0

Thx mate, działa dla mnie. Również twoje rozwiązanie "\ n" na wyjściu jest również poprawione. –