2017-05-15 4 views
0


Ich habe eine Frage zum Parsen von E-Mail in verschiedenen Websites durch Scrapy.
Ich habe solche Spinne:Scrapy, Parsen E-Mail an mehreren Standorten

from scrapy.contrib.spiders import CrawlSpider 

from sufio.items import MItem 


class MSpider(CrawlSpider): 
    name = 'mparser' 
    start_urls = [ 
     'https://horizonsupply.myshopify.com/pages/about-us', 
     'https://fnatic-shop.myshopify.com/pages/about-us', 
     'https://horizonsupply.myshopify.com/pages/about-us', 
     'https://fnatic-shop.myshopify.com/pages/about-us' 

    ] 
    def parse(self, response): 
     item = MItem() 
     item['facebook'] = response.xpath('//a[contains(@href, "facebook")]/@href').extract_first() 
     item['twitter'] = response.xpath('//a[contains(@href, "twitter")]/@href').extract_first() 
#  item['email'] = 
     yield item 

Ich brauche jeden Link zu folgen und überprüfen, ob E-Mail ist. Kann man mit scrapy arbeiten?

+0

_wenn es email_? Kannst du tiefer in deiner Frage erklären? –

+0

@ SebastiánPalma Ich meinte, kann ich E-Mails von jeder Seite mit Hilfe von regulären Ausdruck oder etwas ähnliches analysieren. Ich kann das mit xpath nicht machen, weil es auf jeder Seite anders ist. –

Antwort

1

ich so etwas wie folgt verwenden:

mails = response.xpath('//a[contains(@href, "mailto:")]/@href').extract() 
    mails += response.xpath('//*[not(self::script or self::style)]/text()[normalize-space(.)][contains(.,"@")] | ' 
          '//a[contains(./@href,"@")]/@href').extract() 
    for a in response.xpath('//a[contains(text(),"@")]'): 
     ma = ''.join(a.xpath('./text()').extract()) 
     mails.append(ma) 

Aber nach diesem, i für zusätzliche Funktion entfernen doppelte und ungültige Zeilen.

+0

Ich fand eine andere Lösung dieses Problems, ich verwendete bs4 und schrieb etwas in der Art: def parse_emails (Suppe): email = [] soup_regexp = soup.find_all (text = re.compile (r '(^ [a- zA-Z0-9 _. + -] + @ [a-zA-Z0-9 -] +. [a-zA-Z0-9 -.] + $) ')) für E-Mail in soup_regexp: E-Mails. anhängen (E-Mail) E-Mails zurücksenden –

Verwandte Themen