2017-09-26 1 views
1

Je suis sur un site de téléchargement d'adresses e-mail à partir de sites Web. J'ai un simple moteur de balayage Scrapy, qui prend un fichier .txt avec des domaines, puis les gratter pour trouver des adresses e-mail.Scrapy - suffixe inattendu "% 0A" dans les liens

Malheureusement, Scrapy ajoute le suffixe "% 0A" dans les liens. Vous pouvez le voir sur le fichier journal.

Voici mon code:

class EmailsearcherSpider(scrapy.Spider): 
    name = 'emailsearcher' 
    allowed_domains = [] 
    start_urls = [] 
    unique_data = set() 

    def __init__(self): 
     for line in open('/home/*****/domains', 
        'r').readlines(): 
      self.allowed_domains.append(line) 
      self.start_urls.append('http://{}'.format(line)) 


    def parse(self, response): 
     emails = response.xpath('//body').re('([a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)') 
     for email in emails: 
      print(email) 
      print('\n') 
      if email and (email not in self.unique_data): 
       self.unique_data.add(email) 
       yield {'emails': email} 

domains.txt:

link4.pl/kontakt 
danone.pl/Kontakt 
axadirect.pl/kontakt/dane-axa-direct.html 
andrzejtucholski.pl/kontakt 
premier.gov.pl/kontakt.html 

Voici les journaux de la console:

2017-09-26 22:27:02 [scrapy.core.engine] INFO: Spider opened 
2017-09-26 22:27:02 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
2017-09-26 22:27:02 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6026 
2017-09-26 22:27:03 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (301) to <GET http://www.premier.gov.pl/kontakt.html> from <GET http://premier.gov.pl/kontakt.html> 
2017-09-26 22:27:03 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (301) to <GET https://andrzejtucholski.pl/kontakt> from <GET http://andrzejtucholski.pl/kontakt%0A> 
2017-09-26 22:27:05 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (301) to <GET https://axadirect.pl/kontakt/dane-axa-direct.html%0A> from <GET http://axadirect.pl/kontakt/dane-axa-direct.html%0A> 
2017-09-26 22:27:05 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (301) to <GET https://www.link4.pl/kontakt> from <GET http://link4.pl/kontakt%0A> 
2017-09-26 22:27:05 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (301) to <GET https://danone.pl/Kontakt%0a> from <GET http://danone.pl/Kontakt%0A> 
+0

N'utilisez pas readlines() '; un fichier est déjà un itérateur, ce qui vous permet de lire une ligne à la fois à partir du fichier. – chepner

+0

@chepner Merci! – dzierzak

Répondre

0

J'ai trouvé la bonne solution. Je devais utiliser la fonction rstrip.

self.start_urls.append('http://{}'.format(line.rstrip())) 
0

Le %0A est le retour à la ligne. La lecture des lignes garde les caractères de nouvelle ligne intacts. Pour se débarrasser d'eux, vous pouvez utiliser la fonction string.strip, comme ceci:

  self.start_urls.append('http://{}'.format(string.strip(line))) 
+0

J'ai découvert que, la fonction .rstrip est mieux ici. En tout cas, merci pour votre réponse! – dzierzak