通过电子邮件发送结果的Python爬虫

时间:2015-11-25 22:00:09

标签: python email beautifulsoup web-crawler reddit

感谢您的帮助。 所以我试着制作一个小爬虫来检查reddit的gif页面,然后写下所有的GIF +标题,把它们放在一个列表中,然后通过电子邮件发送这个列表(给我的同事)

到目前为止这么好,工作得很好,但它发送的列表看起来像这样 e.g:

  

' 1。老人在电子音乐节上跳舞:http://i.imgur.com/2EtphXY.gifv',' 2。生成文本..:http://i.imgur.com/fH6eV2B.gifv',' 3。豪猪爬上来保暖:

等等......

我想要什么?我希望标题+链接在电子邮件中以单行打印+我想添加一个文本。 像这样

  

您好朋友欢迎来到每日GIF

     
      
  1. title1:link1
  2.   
  3. title2:link2
  4.   
  5. title3:link3
  6.   

到目前为止,这是我的代码:

import requests
from bs4 import BeautifulSoup
import urllib2
import smtplib
import time
import random
import datetime

opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
url = 'https://www.reddit.com/r/gifs/?count=26&before=t3_3u4mnz'
response = opener.open(url)
page = response.read()
soup = BeautifulSoup(page, "lxml")
list = []

variable = 1
for link in soup.findAll('a', {'class': 'title may-blank '}):
    href = link.get('href')
    name = link.string
    #print str(variable) + ". " + name + " : " + href
    list.append(str(str(variable) + ". " + name + ": " + href))
    variable += 1


GMAIL_USERNAME = "blabla@blabla.com"
GMAIL_PASSWORD  = "xxxxxxxx"
email_subject = "Lunchtime gifs of the day: " + str(time.strftime("%d/%m/%Y"))
recipient = "workfriends@blabla.com"
body_of_email = str(list)[1:-1]
session = smtplib.SMTP('smtp.gmail.com', 587)
session.ehlo()
session.starttls()
session.login(GMAIL_USERNAME, GMAIL_PASSWORD)

headers = "\r\n".join(["from: " + GMAIL_USERNAME,
                       "subject: " + email_subject,
                       "to: " + recipient,
                       "mime-version: 1.0",
                       "content-type: text/html"])

content = headers + "\r\n\r\n" + body_of_email

session.sendmail(GMAIL_USERNAME, recipient, content)

print "Email send!"

3 个答案:

答案 0 :(得分:1)

使用SELECT ... WHERE 1 = 1 AND price BETWEEN 1.00 AND 3.00... 标头确定电子邮件的内容类型。您已指定电子邮件的内容类型为Content-Type,阅读此电子邮件的客户端会将这些内容解释为HTML。

因此,使您发送的位看起来像HTML。我会使用text/html<br /> <ol />标记。或者,将电子邮件发送为<li />,您的text/plain字符将按照您的预期进行解释。

就个人而言,对于这样的电子邮件,我更喜欢它们是\n格式。

答案 1 :(得分:0)

尝试在for循环中使用此行。

    list.append(str(str(variable) + ". " + name + ": " + href+"\n"))

这应解决问题。

答案 2 :(得分:0)

尝试yagmail

import yagmail
yag = yagmail.SMTP('gmail_username', 'gmail_password')
yag.send('to@email.com', 'subjectline', contents='content')

请注意,内容将放入HTML中。所以你可以简单地把东西放在:

contents = ['<h1>title1</h1><a href="link1">link1</a>',
            '<h1>title2</h1><a href="link2">link2</a>' 

使用pip install yagmail获取yagmail的副本。

完全披露:我是yagmail的开发者。