2017-06-20 10 views
0

私は次のコードを持っています。私はニュースを見ることができるように、エクスポートされたアイテムを私に電子メールで送る必要があります。私はScrapy - 1.4 - Email Docsを認識しており、私のコードで同じことをするのに十分な例を見つけることができないようです。基本的な電子メールでの送信

このコードを開始するには、どのような方法が良いですか?そうでない場合、いくつかの例を指摘できますか?

import scrapy 
import collections 

from collections import OrderedDict 
from scrapy.spiders import XMLFeedSpider 
from tickers.items import tickersItem 
class Spider(XMLFeedSpider): 
    name = "EmperyScraper" 
    allowed_domains = ["yahoo.com"] 
    start_urls = ('https://feeds.finance.yahoo.com/rss/2.0/headline?s=UNXL,UQM,URRE,UUUU,VBLT,VGZ,VKTX,VTGN,WINT,XGTI,XTNT,XXII,ZSAN',) 
    itertag = 'item' 

    def parse_node(self, response, node): 
     item = collections.OrderedDict() 
     item['Title'] = node.xpath(
      'title/text()').extract_first() 
     item['PublishDate'] = node.xpath(
      'pubDate/text()').extract_first() 
     item['Description'] = node.xpath(
      'description/text()').extract_first()  
     item['Link'] = node.xpath(
      'link/text()').extract_first() 
     yield item 

アップデート:私もそれを自動化するためにメソッドに探しています!

編集: 以下は、私のコードは、pipelines.pyファイルです。私がこのスクリプトを実行すると、私は>>>yを出してしまいました。本当に混乱している:

# -*- coding: utf-8 -*- 

# Define your item pipelines here 
# 
# Don't forget to add your pipeline to the ITEM_PIPELINES setting 
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html 
import smtplib 
from smtplib import SMTP 
from email.mime.text import MIMEText 
from email.mime.multipart import MIMEMultipart 

class TickersPipeline(object): 
    def send_mail(self, message, title): 
     from email.MIMEMultipart import MIMEMultipart 
     from email.MIMEText import MIMEText 
     gmailUser = '[email protected]' 
     gmailPassword = 'example' 
     recipient = '[email protected]' 

     msg = MIMEMultipart() 
     msg['From'] = gmailUser 
     msg['To'] = recipient 
     msg['Subject'] = title 
     msg.attach(MIMEText(message)) 
     mailServer = smtplib.SMTP('smtp.gmail.com', 587) 

     mailServer.ehlo() 
     mailServer.starttls() 
     mailServer.ehlo() 
     mailServer.login(gmailUser, gmailPassword) 
     mailServer.sendmail(gmailUser, recipient, msg.as_string()) 
     mailServer.close() 
+0

https://stackoverflow.com/a/11411162/131187に記載されている内容を超えて知っておく必要があるものはありますか? –

+0

これは動作しません。何らかの理由で、私はそのようなコードを使用して私は掻きすることができますが、私は電子メールを受け取っていません。 – Friezan

+0

私は 'from scrapy.mail import MailSender'で始まるコードを参照していました。 OK、小さくしてください。私は 'parse_node'が有用な電子メールアイテムを' yield'すると仮定します。 'To'と 'cc'フィールドにあなたの電子メールアドレス(リスト内)を指定し、残りのものは 'yield 'の直前の3行のコードの最後の2行を入れてみてください。何が起こるか見る。それが動作する場合。 'item'から' body'に物を押しつけて、あなたがどれくらい遠くにいるかを見てください。 –

答えて

0

ここでは、治療のために提供される基本的なチュートリアルの1つからまとめたガイドがあります。

import scrapy 
from scrapy.crawler import CrawlerProcess 
import smtplib 


class QuotesSpider(scrapy.Spider): 
    name = "quotes" 

    def start_requests(self): 
     urls = [ 
      'http://quotes.toscrape.com/page/1/', 
      'http://quotes.toscrape.com/page/2/', 
     ] 
     for url in urls: 
      yield scrapy.Request(url=url, callback=self.parse) 

    def parse(self, response): 
     page = response.url.split("/")[-2] 
     filename = 'quotes-%s.html' % page 
     server = smtplib.SMTP(my_server, port=587) 
     server.starttls() 
     server.login(my_user, my_pswd) 
     server.sendmail(my_email, [my_email], filename) 
     server.quit() 

process = CrawlerProcess({ 
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)' 
}) 

process.crawl(QuotesSpider) 
process.start() 
関連する問題