2017-10-11 3 views
0

les gens! J'essaie d'obtenir toutes les URL internes dans l'ensemble du site à des fins de référencement et j'ai récemment découvert Scrapy pour m'aider dans cette tâche. Mais mon code renvoie toujours une erreur:Obtenez toutes les URL dans un site entier en utilisant Scrapy

2017-10-11 10:32:00 [scrapy.core.engine] INFO: Spider opened 
2017-10-11 10:32:00 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min 
) 
2017-10-11 10:32:00 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023 
2017-10-11 10:32:01 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (302) to <GET https://www.**test**.com/> from 
<GET http://www.**test**.com/robots.txt> 
2017-10-11 10:32:02 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.**test**.com/> (referer: None) 
2017-10-11 10:32:03 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (302) to <GET https://www.**test**.com/> from 
<GET http://www.**test**.com> 
2017-10-11 10:32:03 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.**test**.com/> (referer: None) 
2017-10-11 10:32:03 [scrapy.core.scraper] ERROR: Spider error processing <GET https://www.**test**.com/> (referer: None) 
Traceback (most recent call last): 
    File "c:\python27\lib\site-packages\twisted\internet\defer.py", line 653, in _runCallbacks 
    current.result = callback(current.result, *args, **kw) 
    File "c:\python27\lib\site-packages\scrapy\spiders\__init__.py", line 90, in parse 
    raise NotImplementedError 
NotImplementedError 

Je modifie l'URL d'origine.

Voici le code que je suis en cours d'exécution

# -*- coding: utf-8 -*- 
import scrapy 
from scrapy.spiders import CrawlSpider, Rule 
from scrapy.linkextractors import LinkExtractor 


class TestSpider(scrapy.Spider): 
    name = "test" 
    allowed_domains = ["http://www.test.com"] 
    start_urls = ["http://www.test.com"] 

    rules = [Rule (LinkExtractor(allow=['.*']))] 

Merci!

EDIT:

Cela a fonctionné pour moi:

rules = (
    Rule(LinkExtractor(), callback='parse_item', follow=True), 
) 

def parse_item(self, response): 
    filename = response.url 
    arquivo = open("file.txt", "a") 
    string = str(filename) 
    arquivo.write(string+ '\n') 
    arquivo.close 

= D

+0

Bienvenue à SO! Je suggère que vous postez la solution à la question comme réponse. Cela aidera les futurs lecteurs à mieux comprendre la question et la réponse. – Nisarg

Répondre

0

L'erreur que vous obtenez est causé par le fait que vous n'avez pas défini la méthode parse dans votre araignée , ce qui est obligatoire si vous basez votre araignée sur la classe scrapy.Spider.

Pour votre utilisation (c.-à-d. L'exploration de votre site Web entier), il est préférable de baser votre araignée sur la classe scrapy.CrawlSpider. En outre, dans Rule, vous devez définir l'attribut callback comme une méthode qui analysera chaque page visitée. Dernier changement cosmétique, dans LinkExtractor, si vous voulez visiter chaque page, vous pouvez laisser allow comme sa valeur par défaut est tuple vide ce qui signifie qu'il va correspondre à tous les liens trouvés.

Consulter un CrawlSpider example pour le code de béton.