爬虫之微信发送每天60秒读懂世界
最近自学爬虫,看的公众号有人在推“每天60秒读懂世界”,尝试用爬虫实现,通过微信推送。抛砖引玉,有请大神们多多指导。
1.Windows下打开微信,固定在屏幕左上角,这样便于我们固定微信上各个控件所在坐标
2.把鼠标移动到微信左边的“通讯录”按钮上,单击,打开通讯录
3.把鼠标移动到搜索框把你要找的人的微信名复制进去,回车,打开对话框
(你要问我为什么要先打开通讯录再去搜索框搜?百度很多,大多失效了,就这个有效,微信部分代码我是抄脚本之家的)
4.通过爬虫获取每天60秒都懂世界内容,回车或者alt+s 发送
上效果图:
上代码:
# Pycharm使用Alt+Enter大法,自动安装软件包
import requests
import win32clipboard as w
import win32con
import win32api
import win32gui
import time
import requests
from parsel import Selector
# 爬虫
def getUrl(url):
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:98.0) Gecko/20100101 Firefox/98.0'}
response = requests.get(url=url,headers=headers)
return response
# 把文字放入剪贴板
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))
if __name__ == "__main__":
name = input('请输入消息接收人:')
# 获取鼠标当前位置
# hwnd=win32gui.FindWindow("MozillaWindowClass",None)
hwnd = win32gui.FindWindow("WeChatMainWndForPC", None)
win32gui.ShowWindow(hwnd, win32con.SW_SHOW)
win32gui.MoveWindow(hwnd, 0, 0, 1000, 700, True)
time.sleep(0.01)
# 1.移动鼠标到通讯录位置,单击打开通讯录
movePos(28, 147)
click()
# 2.移动鼠标到搜索框,单击,输入要搜索的名字
movePos(148, 35)
click()
setText(name)
ctrlV()
time.sleep(1)# 别问我为什么要停1秒,问就是给微信一个反应的时间,他反应慢反应不过来,其他位置暂停的原因同样
enter()
time.sleep(1)
# 3.复制要发送的消息,发送
time.sleep(1)
url = 'https://www.zhihu.com/people/mt36501'
html = Selector(getUrl(url).text)
links = 'https:%s' % html.css('.ContentItem-title span a::attr(href)').get()
content_html = Selector(getUrl(links).text)
contents = content_html.css('.RichText p::text').getall()
content = '\n'.join(contents)
setText(content)
ctrlV()
altS()
后续:如果要发多人,可以做一个字典,或者做一个Excel表格循环读取发送,这里不多叙述。
本帖最后由 txq0211 于 2022-3-28 14:00 编辑
懒得修改了,不用接口也是一方面特点
接口版本,加上import json,替换73-78行
import requests,json
from parsel import Selector
def getUrl(url):
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:98.0) Gecko/20100101 Firefox/98.0'}
response = requests.get(url=url,headers=headers)
return response
if __name__ == '__main__':
url = 'https://www.zhihu.com/api/v4/columns/c_1261258401923026944/items?limit=1'
data = json.loads(getUrl(url).text)["data"]["content"]
content = '\n'.join(Selector(data).css('p::text').getall())
print(content)
可以的话其实用方糖或者企业微信做推送会方便一些,我之前写的用的方糖的,每天早...
本帖最后由 情绪666 于 2022-3-28 14:40 编辑txq0211 发表于 2022-3-28 13:57
懒得修改了,不用接口也是一方面特点
接口版本,加上import json,替换73-78行
#可以的话其实用方糖或者企业微信做推送会方便一些,我之前写的用的方糖的,每天早上七点定时推送,只是定时时间是自己算的,用死循环写的也不太好{:1_937:}
# -*- coding: utf-8 -*-
# @Time : 2021/11/26 9:58
# @AuThor : Melon
# @site :
# @note :
# @file : today60.py
# @Software: PyCharm
import logging
import time
import traceback
from datetime import datetime, timedelta
import requests
from lxml import etree
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
BASE_URL = 'http://www.zhihu.com/api/v4/columns/c_1261258401923026944/items?limit=1'
FT_SERVER_URL = 'https://sctapi.ftqq.com/方糖key.send'
def send_msg(title, message):
data = {
'title': title,
'desp': message,
}
post = requests.post(url=FT_SERVER_URL, data=data)
logger.info(post.text)
def start():
response = requests.get(url=BASE_URL, headers={"User-Agent": None})
response_json = response.json()
response_json_data = response_json['data']
data_content = response_json_data['content']
# xpath解析
html = etree.HTML(data_content)
image = html.xpath("//figure/img/@data-original")
st = '\n\n【 %s 】 %s \n\n\n\n' % (response_json_data['title'], image)
# print(image)
p_text = html.xpath("//p/text()")
for text in p_text:
st += text + '\n\n'
send_msg(response_json_data['title'], st)
return st
if __name__ == '__main__':
while True:
try:
# 定时
now = datetime.now()# 记录当前时间
sched_time = datetime.strptime(str(now.replace(hour=7, minute=00, second=00))[:19], '%Y-%m-%d %H:%M:%S')
total_seconds = (sched_time - datetime.now()).total_seconds()# 两个时间的差值
if total_seconds < 0:
now += timedelta(days=1)
# 过了今天的 7 点,计算明天 7 点,进行定时
sched_time = datetime.strptime(str(now.replace(hour=7, minute=00, second=00))[:19], '%Y-%m-%d %H:%M:%S')
sched_time_total_seconds = (sched_time - datetime.now()).total_seconds()# 两个时间的差值
logging.info('当前时间: %s\t距离下次发送时间: %s\t还差: %s 秒' % (str(datetime.now()), sched_time, sched_time_total_seconds))
time.sleep(sched_time_total_seconds)
else:
logging.info('当前时间: %s\t距离下次发送时间: %s\t还差: %s 秒' % (str(datetime.now()), sched_time, total_seconds))
time.sleep(total_seconds)
# 定时完成,开始发送
s = start()
logging.info(s)
except Exception as e:
traceback.print_exc()
logging.error('------- error -----> %s', e)
time.sleep(5)
估计是我太菜了,不是太懂呢,有更直接点的工具吗。{:1_937:} zfj68888 发表于 2022-3-28 11:52
估计是我太菜了,不是太懂呢,有更直接点的工具吗。
可以转成程序 用按键精灵不是更放便吗? 接口{:301_998:} http://www.zhihu.com/api/v4/columns/c_1261258401923026944/items?limit=1 情绪666 发表于 2022-3-28 12:02
接口 http://www.zhihu.com/api/v4/columns/c_1261258401923026944/items?limit=1
哈哈,谢谢,之前没找到,只好用笨方法 情绪666 发表于 2022-3-28 12:02
接口 http://www.zhihu.com/api/v4/columns/c_1261258401923026944/items?limit=1
主要还是想要每天自动获取最新,明天试试这个接口 txq0211 发表于 2022-3-28 12:24
主要还是想要每天自动获取最新,明天试试这个接口
速度更新 个人偏好使用这个库制作RPA工具
import pyautogui 有软件,就更好啦