1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| import os
import requests
class Qun: def __init__(self, cookie: str, bkn: str) -> None: self.cookie = cookie self.bkn = bkn
def get_data(self, data: dict, params='search_group_members') -> dict: url = f'https://qun.qq.com/cgi-bin/qun_mgr/{params}' headers = { 'Cookie': self.cookie, 'Origin': 'https://qun.qq.com', 'Referer': 'https://qun.qq.com/member.html', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.42' } res = requests.post(url, headers=headers, data=data) return res.json()
def get_gc(self): ''' 获取群号 ''' data = { 'bkn': self.bkn } params = 'get_group_list' for data in self.get_data(data, params).get('join'): yield data.get('gc')
def get_count(self, gc: int) -> int: ''' 获取某个群的成员数量 ''' data = { 'gc': gc, 'st': '0', 'end': '20', 'sort': '0', 'bkn': self.bkn } return self.get_data(data).get('search_count')
def set_data(self, gc: int, num: int): ''' 构造表单数据 ''' n = 0 for st in range(0, num, 20): if st != 0: n += 1 st += n end = st + 20 else: end = st + 20 if st >= num: break elif end > num: yield { 'gc': gc, 'st': st, 'end': num, 'sort': '0', 'bkn': self.bkn } break yield { 'gc': gc, 'st': st, 'end': end, 'sort': '0', 'bkn': self.bkn }
def main(self): if not os.path.exists('./qq'): os.mkdir('./qq') for gc in self.get_gc(): num = self.get_count(gc) for data in self.set_data(gc, num): for uins in self.get_data(data).get('mems'): print(uins.get('uin')) with open(f'./qq/{gc}.txt', 'a+') as f: f.write(f'{uins.get("uin")}\n')
COOKIE = ''
BKN = ''
if __name__ == '__main__': Qun(COOKIE, BKN).main()
|