如何实现实时抓取新浪微博内容并同步到qq群中

如题。只要新浪某个人的微博一更新,立刻实现qq群里也同步更新!

只获取最近一条内容,判断消息ID在不在文件中,不在就写入文件并发送QQ消息


# # -*- coding:utf-8 -*-
# '''
# 发送微博消息
# '''
from time import sleep
import win32gui
import win32con
import win32clipboard
import requests
from urllib.parse import urlencode
from os import path


class CSendQQMsg():
    def __init__(self, friendName, msg):
        self.friendName = friendName
        self.msg = msg

    def setText(self):
        win32clipboard.OpenClipboard()
        win32clipboard.EmptyClipboard()
        win32clipboard.SetClipboardData(win32con.CF_UNICODETEXT, self.msg)
        win32clipboard.CloseClipboard()

    def sendmsg(self):
        self.setText()
        hwndQQ = win32gui.FindWindow(None, self.friendName)
        if hwndQQ == 0:
            print('未找到qq对话框')
            return
        win32gui.SendMessage(hwndQQ, win32con.WM_PASTE, 0, 0)
        win32gui.SendMessage(hwndQQ, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)


class Weibo():
    def __init__(self, userid):
        self.base_url = 'https://m.weibo.cn/api/container/getIndex?'
        self.headers = {
            'Host': 'm.weibo.cn',
            'Referer': 'https://m.weibo.cn/u/3549916270',
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
            'X-Requested-With': 'XMLHttpRequest',
        }
        self.userid = userid

    def get_page(self):
        params = {
            'type': 'uid',
            'value': self.userid,
            'containerid': '107603' + str(self.userid),
            'page': 1
        }
        url = self.base_url + urlencode(params)
        try:
            response = requests.get(url, headers=self.headers)
            if response.status_code == 200:
                return response.json()
        except requests.ConnectionError as e:
            print('Error', e.args)

    def parse_page(self):
        if self.get_page():
            items = self.get_page().get('data').get('cards')
            id = items[0].get('mblog').get('id')
            text = items[0].get('mblog').get('text')
            return id, text


if __name__ == '__main__':
    friendName = '灰丶'  # QQ用户名
    weibo = Weibo('3549916270')  # 微博用户ID
    id, text = weibo.parse_page()
    qq = CSendQQMsg(friendName, text)
    while True:
        if not path.exists('output.txt'):
            with open('output.txt', 'a') as f:
                f.write(id)
            qq.sendmsg()  # 发送QQ消息
        else:
            with open('output.txt', 'r', encoding='utf-8') as f:
                data = f.read()
            if id not in data:
                with open('output.txt', 'a') as f:
                    f.write(id)
                qq.sendmsg()
            else:
                print("微博内容id已在文件中")
        sleep(10)



使用示例:
需要打开QQ对话框

img

img

定时轮询抓取用户微博链接的网页内容,然后分析获取到的内容,判断有没有发表新内容,如果有,则发QQ信息。

写个程序定时去抓这个博主的主页 有新内容就爬取一遍数据,至于同步qq群消息 可以pc端qq客户端窗体程序模拟发送 但比较麻烦 需要一定的开发能力

微博可以直接分析数据接口,得到接口地址模拟用户发送请求。成功拿到数据后。发送QQ消息,这就需要用代码模拟操作键盘,一般都是模拟control c和control V把消息复制粘贴放进去,然后enter发送

思路:做个定时器接口,每隔5秒或10s定时获取某个人的微博内容数据,可以只获取每条微博的唯一标识符,比如id,第一次将id的所有集合存到数据库,以后每次获取后将新的标识符集合和上一次的作比较,然后将标识符不存在旧集合中的微博信息更新并发送到QQ群

你用什么工具?
微博获取需编程调用浏览器,你需要把什么内容转发到QQ,那么你就在浏览器中打开网页,并按F12了解内容在哪个控件中和怎么获取。
获取到的内容,你可以调用WinAPI函数操作QQ完成,这个以前是有人写过的,但因为版本升级等原因,你要修改一下。

把微博的cookies获取到,然后定时取文本,绑定qq发送

用脚本,搭建服务器,往上面挂着就好啦,python写个定时实时抓取

首先爬去微博和分享都需要使用网页版,然后用selenium模拟人工操作