特别的程序,给你最爱的人

前言
当谈到程序员的时候,可能大数人的印象就是,高薪、直男、不修边幅,死宅,没情趣。但是程序员真的是这样吗?答案显然不是,他们只是感兴趣的点不在这些上面而已,但是只要一出手,就会直击女神的要害。今天小编就给大家带来一个高逼格的示爱程序,读者们可以根据自己的情况进行适当的修改,如果觉得分析的篇幅太长的话,可以直接下滑到底端获取代码。

运行结果




本次程序所需要的包

import requests
from lxml import etree
from bs4 import BeautifulSoup as BS
from selenium import webdriver
import time
import random
import os
import itchat
import datetime复制代码

每天发送的微信消息格式如下:

    message = """
    亲爱的{}:

    早上好,今天是你和 NGU 相恋的第 {} 天~

    今天他想对你说的话是:

    {}

    最后也是最重要的!
    """.format("骑摩托的糖", str(inLoveDays), love_word)复制代码


这里需要填写的第一个字段是 ta 的称呼,inLoveDays 为你们相识相恋的天数。

love_word 是每天为 ta 精心准备情话内容,当然如果你的文笔好也可以自己写。

这里小编选取的是网上的情话大全(尴尬)




当然最后也是最重要的!每天不尽相同的【我爱你】图片!






程序思路

本次程序在多个系统平台都可以运行,此次主要用到的库有 selenium、itchat、request。程序主要分为两部分第一数据的抓取,一些情话信息和图片信息。另一部就是利用 itchat 自动发送消息给你的girlfriend。


情话信息

如果对你的文笔有信心,那你可以自己写些情话。当然大部分人的文笔跟我一样是比较差的,所以这时候我们就可以利用网上的资源,比如下面的情话网站。

http://www.binzz.com/yulu2/3588.html复制代码

在抓取这个网站的情话时,如果你利用普通的爬取思路,即利用 request 进行请求,你会发现网页获取的数据是乱码并且不完整。所以在这块为了操作方便,我利用了 Selenium+Chrome 的自动化来抓取,实现可见即可爬,来获取网站的信息。最后把获取到的数据保存到当前目录下的【love_word.txt】方便之后的读取。

表白图片资源

为了配合此次示爱程序,我专门去找了些带有【我爱你】的图片资源。可以在360图片中搜索【我爱你】的关键词,我们就可以获取到大量的这样图片资源。

http://image.so.com/i?q=%E6%88%91%E7%88%B1%E4%BD%A0%E7%94%B5%E5%BD%B1%E5%8F%B0%E8%AF%8D&src=srp复制代码




由于此链接有一定的反爬策略,所以我们还是用Selenium加Chrome进行自动化爬取,并用到了BeautifulSoup库来解析,当然你也也可以用你所熟悉的解析库来解析,并将爬取下来的图片按序号保存在我们的【示爱图片】里。

由于你可能不是第一次运行这个代码,所以我们需要加上判断文件是否存在的语句,如果存在,我们就不需要抓取数据,直接从文件里读取即可,反之,就运行抓取数据的代码。

表白程序源码

此次表白程序主要为 以下几个函数
def crawl_Love_words():

def getimage():

def isexist(path):

def send_news():

def main():

复制代码


crawl_Love_words()

此函数通过 selenium + xpath 来抓取情话网站的资源,并存入到当前目录下的【love_word.txt】文件。

def crawl_Love_words():
   """
   抓取情话
   :return:
   """
   browser = webdriver.Chrome()
   print("正在抓取情话...")
   url = "http://www.binzz.com/yulu2/3588.html"
   browser.get(url)
   html = browser.page_source
   Selector = etree.HTML(html)
   love_words_xpath_str = "//div[@id='content']/p/text()"
   love_words = Selector.xpath(love_words_xpath_str)
   for i in love_words:
       word = i.strip("\n\t\u3000\u3000").strip()
       with open(love_word_path, "a") as file:
           file.write(word + "\n")
   print("情话抓取完成")复制代码


getimage()

此函数用来爬取360图片中带有【我爱你】关键词的图片资源,通过 Selenium+Chrome自动化抓取来实现。

def getimage():
   """
   抓取我爱你的图片
   :return:
   """
   browser = webdriver.Chrome()
   url='http://image.so.com/i?q=%E6%88%91%E7%88%B1%E4%BD%A0%E7%94%B5%E5%BD%B1%E5%8F%B0%E8%AF%8D&src=srp'
   browser.get(url)
   count=1
   for i in range(2):
       js = "var q=document.documentElement.scrollTop=100000"
       browser.execute_script(js)
       time.sleep(1)
   time.sleep(2)
   response=browser.page_source
   html=BS(response,'lxml')
   imgurls=html.select('img')
   isexist(pic_path)
   for imgurl in imgurls:
       response = requests.get(imgurl['src'])
       image_path=str(count)+'.jpg'
       count+=1
       with open(image_path,'wb') as f:
           f.write(response.content)
           print(str(count)+' success')复制代码


isexist()

此函数用来判断我们的文件是否存在,如果存在则直接就切换到文件夹目录下,否则,创建文件夹,再切换到文件夹目录下,此函数作用主要是在抓取图片信息时,判断【示爱文件】是否存在。

def isexist(path):
   """
   判断文件是否存在
   :param path:
   :return:
   """
   if not os.path.exists(path):
       os.makedirs(path)
       os.chdir(path)
   else:
       os.chdir(path)复制代码

send_new()

此函数通过利用 itchat 库,实现给你的微信好友自动发送消息。在这个函数中我利用 datetime 模块来计算你和所输入的ta之间相识相恋的时间。并且在登录的时候我添加了一个【hotReload=True】,也叫做热启动。这样你就可以不用每次运行程序的时候都要登录。
def send_news():
   """
   给你心爱的ta发送消息和图片
   :return:
   """
   # 计算相恋天数
   inLoveDate = datetime.datetime(2016, 5, 30)  # 相恋的时间
   todayDate = datetime.datetime.today()
   inLoveDays = (todayDate - inLoveDate).days
   Wordsnumber=random.randint(1,120)#随机挑选出情话

   # 获取情话
   file_path = love_word_path
   with open(file_path) as file:
       love_word = file.readlines()[Wordsnumber].split(':')[1]

   itchat.auto_login(hotReload=True)  # 热启动,不需要多次扫码登录
   my_friend = itchat.search_friends(name=u'骑摩托的糖')
   girlfriend = my_friend[0]["UserName"]
   print(girlfriend)
   message = """
   亲爱的{}:

   早上好,今天是你和 NGU 相恋的第 {} 天~

   今天他想对你说的话是:

   {}

   最后也是最重要的!
   """.format("骑摩托的糖", str(inLoveDays), love_word)
   itchat.send(message, toUserName=girlfriend)

   files = os.listdir(pic_path)
   print(files)
   file = files[Wordsnumber]
   print(file)
   love_image_file = "./表白图片/" + file
   try:
       itchat.send_image(love_image_file, toUserName=girlfriend)
   except Exception as e:
       print(e)复制代码

main()

此函数的作用主要是运行上面的3个函数,并判断我们所需要的资源是否存在,如果存在直接从所在文件中提取即可,反之运行函数。

def main():
   if os.path.exists(love_word_path):
       print('情话已存在')
   else:
       crawl_Love_words()

   if os.path.exists(pic_path):
       print('图片已存在')
   else:
       getimage()
   send_news()复制代码


定时任务

加上定时任务,你可以挑选你想要的时间给你心爱的ta发送甜甜的情话和图片,如果你不需要定时,也可以不需要此段代码,直接运行main()函数即可。
if __name__ == '__main__':
   while True:
       curr_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
       love_time = curr_time.split(" ")[1]
       if love_time == "13:14:00":
           main()
           time.sleep(60)
       else:
           print("还没到示爱的时间哟,现在时间:" + love_time)复制代码


示爱程序使用教程

首先你需要把相应的源码下载下来,后台回复「表白」即可获取。其次把相应的库先事先安装好,随后运行程序则会显示一个微信网页登录的二维码,扫描登录即可。在上文我已提到程序加入了热启动,所以你可以无需多次扫描二维码,每次运行即可发送信息。

总结

此次的程序还有很多可以扩展的地方,比如你可以加上任何你喜欢的元素进去,并且如果你觉得一直运行在自己的主机上是件很麻烦的事,那么你可以将程序部署到服务器上,总之,代码我给你了,女神的心能不能挽回就看你的了。

文章首发于公众号【TWcoding】,对Python,爬虫,数据分析,算法感兴趣的朋友们,可以加微信公众号【 TWcoding】,我们一起玩转Python。后台回复Python送你2018最新Python全系资源。

If it works for you.Please,star.

自助者,天助之

http://weixin.qq.com/r/Tyo7I4jE3NWjrcxA939d (二维码自动识别)


转载于:https://juejin.im/post/5b8dc5ade51d4538c3624780

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值