huhahuhahu

Python|早安日报,微信批量发送消息~

import requests
import re
import itchat
import datetime
import time
from bs4 import BeautifulSoup

def wenhou():
    headers = {
    \'Accept\':\'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\',
    \'Accept-Encoding\':\'gzip, deflate, sdch, br\',
    \'Accept-Language\':\'zh-CN,zh;q=0.8\',
    \'Cache-Control\':\'max-age=0\',
    \'Connection\':\'keep-alive\',
    \'Cookie\':\'_ga=GA1.2.1295241282.1555764994; _ntes_nuid=ba6c01094ad014ee67291cbd93fbf9ca; _ntes_nnid=cdb6628bbe04b0309ff818ea7c47119e,1561017743195; NNSSPID=e2f760b6a8494ad4ba99f7987b3cab06; NTES_hp_textlink1=old; ne_analysis_trace_id=1561018193650; Province=0; City=0; vinfo_n_f_l_n3=bd4ac504432134d2.1.1.1561017743224.1561019652855.1561019887629; s_n_f_l_n3=bd4ac504432134d21561019791428\',
    \'Host\':\'tech.163.com\',
    \'If-Modified-Since\':\'Thu, 20 Jun 2019 08:08:01 GMT\',
    \'Referer\':\'http://tech.163.com/\',
    \'Upgrade-Insecure-Requests\':\'1\',
    \'User-Agent\':\'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0\',
    }
    res = requests.get(\'http://www.weather.com.cn/weather1d/101110102.shtml\')       #请求并获取当日天气情况网页
    turl = requests.get(\'https://tech.163.com/special/00097UHL/tech_datalist.js?callback=data_callback\', headers = headers)#请求并获取最新科技新闻,来源于网易
    turl.encoding = turl.apparent_encoding     
    res.encoding = \'utf-8\'
    soup1 = BeautifulSoup(res.text, \'html.parser\')  #对天气网页进行格式化处理
    soup2 =turl.text[50:-2]         #直接截取新闻主体内容,便于后期处理
    # 取评论数

    #print(soup)

    why = \'来自大学生新技能的早安日报:\'                 #问候语1
    new = \'以下是今日最新的科技头条:\'                   #提示语
    cytj = soup1.find(\'a\',{\'target\':\'_blank\',\'href\':\'http://www.weather.com.cn/forecast/ct.shtml?areaid=101110102\'}) #检索穿衣相关标签
    tianqi = soup1.find(\'input\',id=\'hidden_title\')[\'value\']         #提取天气信息
    top10 = \'\'.join(why+\'\n\'+ tianqi+\'\n\'+ cytj.p.text+\'\n\' * 2+new+\'\n\')  #初次整合信息            
    
    str1 = re.findall(r\'title.*\',soup2)         #利用正则检索新闻标题
    str2 = re.findall(r\'docurl.*\',soup2)        #利用正则检索新闻url
    for i in range(18):         #获取前18条新闻
        top10 += \'\'.join(str1[i][8:-2]+\':\'+\'\n\') #循环添加新闻标题到top10
        top10 += \'\'.join(str2[i][9:-2]+\'\n\')        ##循环添加url到top10
        #print(type(str1))
    top10 +=\'\'.join(\'\n\' * 2+ \'今天也要主动一些..@_@|||||..\')       #加入固定结尾语
    wenhou1 = [top10]          #封装内容,便于微信发送
    #print(top10)
    return wenhou1

#以下为微信消息批处理
itchat.auto_login(hotReload=True)           #"hotReload=True"用于保持持续登陆,5分钟没动作则失效
#users = itchat.search_friends(name=\'Hotbox\')
#userName = users[0][\'UserName\']
friends = itchat.get_friends(update=True)[0:]       #@获取所有好友名称

while 1:        #保持持续运行微信
    now = datetime.datetime.now()   #获取当前系统时间
    now_str = now.strftime(\'%Y/%m/%d %H:%M:%S\')[11:]    
    print(\'\r{}\'.format(now_str))       #打印当前时间   
    if now_str in [\'08:05:00\']:     #当8:05分时
        wenhou2 = wenhou()              #开始爬取相关信息
        for friend in friends:          #遍历所有好友
            try:
                userName = friend[\'UserName\']   
                itchat.send(wenhou2[0] ,toUserName=userName)  #发送整理出的消息
            except:
                pass
    if now_str in [\'22:00:00\']:
        for friend in friends:
            try:
                userName = friend[\'UserName\']
                itchat.send(\'晚安~\' ,toUserName=userName)     #发送指定消息
            except:
                pass
    time.sleep(1)#间隔睡眠

  其中有俩点需要记录:

一:

  需要检索json文件多个数据时,使用re更为方便,利用re.findall便可生成结果列表,遍历截取;

二:

  微信消息发送过多时需要提前用list容器封装消息,如a = [b],b为全部消息,具体用法参考上方top10的封装。

发表于 2019-07-03 09:45  QinXD  阅读(245)  评论(0编辑  收藏  举报
 

分类:

技术点:

相关文章: