python趣味は挑戦して登って天気と微博熱を探してそして自動的に微信の友達に送ります。


一、システム環境
1.python 3.8.2
2.webdriver(駆動edge用)
3.マイクロコンピュータ版
4.ウィンドウズ10
二、中国の天気ネットに登ります。
中国天気網のウェブページは動態的に生成されているので、直接データを取り込むことができません。まずwebdriverを使ってウェブページを開けてレンダリングして完成してから、ウェブページのソースコードを保存して、beautiful soupを使ってデータを分析します。よじ登るデータには、リアルタイム温度、最高温度と最低温度、汚染状況、風向きと湿度、紫外線状況、着付けガイドの8つのデータが含まれています。

def getZZWeatherAndSendMsg():
	HTML1='http://www.weather.com.cn/weather1dn/101190201.shtml'
	driver=webdriver.Edge()
	driver.get(HTML1)
	soup=BeautifulSoup(driver.page_source,'html5lib')
	
	#      
	tem=soup.find('span',class_='temp').string
	#           
	maxtem=soup.find('span',id='maxTemp').string
	mintem=soup.find('span',id='minTemp').string
	#      
	poll=soup.find('a',href='http://www.weather.com.cn/air/?city=101190201').string
	#       
	win=soup.find('span',id='wind').string
	humidity=soup.find('span',id='humidity').string
	#       
	sun=soup.find('div',class_='lv').find('em').string
	#      
	cloth=soup.find('dl',id='cy').find('dd').string

	HTML2='http://www.weather.com.cn/weathern/101190201.shtml'
	driver.get(HTML2)
	soup=BeautifulSoup(driver.page_source,'html5lib')
	#      
	wea=soup.find_all('p',class_='weather-info')[1].string
	weatherContent='    :'+tem+'℃'+'
'+' :'+mintem+'~'+maxtem+'
'+' :'+wea+'
'+' :'+win+'
'+' :'+humidity+'
'+' :'+sun+'
'+' :'+poll+'
'+' :'+cloth+'
'+' !!' driver.quit() return weatherContent
三、微博を登って検索する。
中国の天気ネットに比べて、微博熱検索はとても簡単で、直接requestでデータの包みを得て、それからbeautifulを使って解析します。データを解析した後、forで回転してテキストを50回保存しやすくなります。

def getWeibo():
	url='https://s.weibo.com/top/summary'
	headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.41'}
	r=requests.get(url,headers=headers)
	r.raise_for_status()
	r.encoding = r.apparent_encoding
	soup = BeautifulSoup(r.text, "html.parser")
	tr=soup.find_all('tr')
	weiboContent='      :'+'
' for i in range(2,52): text=tr[i].find('td',class_='td-02').find('a').string weiboContent=weiboContent+str(i-1)+'"'+text+'"'+'
' return weiboContent
四、WeChat自動送信メッセージ
win 32 gui自動化操作を使ってWeChatメッセージを送信し、まずWeChatのウィンドウ名を使ってWeChatハンドルを見つけ、その後、マウスをシミュレーションして連絡先を検索し、連絡先ウィンドウを開けてメッセージを送信し、ウィンドウを閉じる。複数の連絡先を同時に送信する場合は、このステップを直接繰り返します。

if __name__=="__main__":
	target_a=['06:55','11:55','19:53']
	target_b=['07:00','12:00','19:54']
	name_list=['Squirrel B','Squirrel B']
	while True:
		now=time.strftime("%m %d %H:%M",time.localtime())
		print(now)
		if now[-5:] in target_a:
			base_weatherContent=getZZWeatherAndSendMsg()
			weiboContent=getWeibo()
		if now[-5:] in target_b:
			hwnd=win32gui.FindWindow("WeChatMainWndForPC", '  ')
			win32gui.ShowWindow(hwnd,win32con.SW_SHOW)
			win32gui.MoveWindow(hwnd,0,0,1000,700,True)
			time.sleep(1)
			for name in name_list:
				movePos(28,147)
				click()
				#2.        ,  ,        
				movePos(148,35)
				click()
				time.sleep(1)
				setText(name)
				ctrlV()
				time.sleep(1)  #          
				enter()
				time.sleep(1)
				now=time.strftime("%m %d %H:%M",time.localtime())
				weatherContent='   '+now+'
'+base_weatherContent setText(weatherContent) ctrlV() time.sleep(1) altS() time.sleep(1) setText(weiboContent) ctrlV() time.sleep(1) altS() time.sleep(1) win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0) time.sleep(60)
五、ソースコード

import win32clipboard as w
import win32con
import win32api
import win32gui
import ctypes
import time
import requests
from urllib.request import urlopen
from bs4 import BeautifulSoup
from selenium import webdriver

#        
def setText(aString):
	w.OpenClipboard()
	w.EmptyClipboard()
	w.SetClipboardData(win32con.CF_UNICODETEXT,aString)
	w.CloseClipboard()
	
#  ctrl+V
def ctrlV():
	win32api.keybd_event(17,0,0,0) #ctrl
	win32api.keybd_event(86,0,0,0) #V
	win32api.keybd_event(86,0,win32con.KEYEVENTF_KEYUP,0)#    
	win32api.keybd_event(17,0,win32con.KEYEVENTF_KEYUP,0)
	
#  alt+s
def altS():
	win32api.keybd_event(18,0,0,0)
	win32api.keybd_event(83,0,0,0)
	win32api.keybd_event(83,0,win32con.KEYEVENTF_KEYUP,0)
	win32api.keybd_event(18,0,win32con.KEYEVENTF_KEYUP,0)
#   enter
def enter():
	win32api.keybd_event(13,0,0,0)
	win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)
#    
def click():
	win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
	win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
#       
def movePos(x,y):
	win32api.SetCursorPos((x,y))

def getZZWeatherAndSendMsg():
	HTML1='http://www.weather.com.cn/weather1dn/101190201.shtml'
	driver=webdriver.Edge()
	driver.get(HTML1)
	soup=BeautifulSoup(driver.page_source,'html5lib')
	
	#      
	tem=soup.find('span',class_='temp').string
	#           
	maxtem=soup.find('span',id='maxTemp').string
	mintem=soup.find('span',id='minTemp').string
	#      
	poll=soup.find('a',href='http://www.weather.com.cn/air/?city=101190201').string
	#       
	win=soup.find('span',id='wind').string
	humidity=soup.find('span',id='humidity').string
	#       
	sun=soup.find('div',class_='lv').find('em').string
	#      
	cloth=soup.find('dl',id='cy').find('dd').string

	HTML2='http://www.weather.com.cn/weathern/101190201.shtml'
	driver.get(HTML2)
	soup=BeautifulSoup(driver.page_source,'html5lib')
	#      
	wea=soup.find_all('p',class_='weather-info')[1].string
	weatherContent='    :'+tem+'℃'+'
'+' :'+mintem+'~'+maxtem+'
'+' :'+wea+'
'+' :'+win+'
'+' :'+humidity+'
'+' :'+sun+'
'+' :'+poll+'
'+' :'+cloth+'
'+' !!' driver.quit() return weatherContent def getWeibo(): url='https://s.weibo.com/top/summary' headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.41'} r=requests.get(url,headers=headers) r.raise_for_status() r.encoding = r.apparent_encoding soup = BeautifulSoup(r.text, "html.parser") tr=soup.find_all('tr') weiboContent=' :'+'
' for i in range(2,52): text=tr[i].find('td',class_='td-02').find('a').string weiboContent=weiboContent+str(i-1)+'"'+text+'"'+'
' return weiboContent if __name__=="__main__": target_a=['06:55','11:55','19:53'] target_b=['07:00','12:00','19:54'] name_list=['Squirrel B','Squirrel B'] while True: now=time.strftime("%m %d %H:%M",time.localtime()) print(now) if now[-5:] in target_a: base_weatherContent=getZZWeatherAndSendMsg() weiboContent=getWeibo() if now[-5:] in target_b: hwnd=win32gui.FindWindow("WeChatMainWndForPC", ' ') win32gui.ShowWindow(hwnd,win32con.SW_SHOW) win32gui.MoveWindow(hwnd,0,0,1000,700,True) time.sleep(1) for name in name_list: movePos(28,147) click() #2. , , movePos(148,35) click() time.sleep(1) setText(name) ctrlV() time.sleep(1) # enter() time.sleep(1) now=time.strftime("%m %d %H:%M",time.localtime()) weatherContent=' '+now+'
'+base_weatherContent setText(weatherContent) ctrlV() time.sleep(1) altS() time.sleep(1) setText(weiboContent) ctrlV() time.sleep(1) altS() time.sleep(1) win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0) time.sleep(60)
六、運転効果
在这里插入图片描述
七、まとめ
中国の天気ネットのデータを登ります。
マイクロブログ熱検索自動送信マイクロメッセージexeに包装して簡単なGUI を書きます。
書くのは簡単ですが、足ります。続けて書くのもおっくうです。参考にしてください。
githubアドレスhttps://github.com/gudu12306/auto_for_wechat
ここでは、pythonの趣味について、天気と微博熱の検索と自動的に微信の友達に送る文章を紹介します。これに関連して、pythonは天気と微博熱の検索内容について、以前の文章を検索してください。