pythonはすべてのqq友達、すべてのグループのすべてのメンバーの一部の情報を取得し、リストをスプレッドシートファイルに保存します.

28852 ワード

本文の作者:峡州仙士
テキストリンク:https://cjh0613.github.io/blog/20200520getQQmembers.html
本サイト(峡州仙士のページ)のすべての文章は特別声明のほか、BY-NC-SAライセンス契約を採用しています.転載は出典を明記してください!
シーケンス
上半期に実用的なコードが山積みになっていることに気づいて、考えてみたら、やはりオープンソースでしょう.これは先に発表されました.{%note danger no-icon%}警告このコードを合理的に使用してください.広告、情報販売などの反人類用途での使用は厳禁です.テンセントサーバーに過負荷でアクセスしないように注意してください.
最新コードはG局Githubに転送されました.https://github.com/cjh0613/getQQmembers
(改良とPull Requestへようこそ)
主にselenium+chromeを使って、Tkinterの簡単なGUIをプラスして、コードは比較的に簡単で、詳しく言わないで、自分で味わってください:完成品:http://d0.ananas.chaoxing.com/download/7694e31d48eedb7b57e5aeefadf67134?fn=qq%E5%A4%87%E4%BB%BD
qq友达のリストを取得します
これはQQからチャージして得たもので、「原始データ」、「グループ化」、「表示名」、「QQ番号」を得ることができます.
  • は自動的にQQを開いてチャージして、ホームページに登録して
  • を下さい
  • Qドルチャージ、チャージ画面
  • を開く
  • チャージアカウント、ポイント交換、リスト
  • を開く
  • ウィンドウをクリックした’はすでに登録してチャージインタフェースを開き、そしてリストボタン
  • をクリックする.
    import selenium
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    import tkinter as tk
    from tkinter.filedialog import asksaveasfilename
    from bs4 import BeautifulSoup
    import lxml
    import openpyxl
    from openpyxl import Workbook
    
    def callback():
        driver.switch_to_frame('webpay-iframe')
        iframe =driver.find_element_by_xpath('//*[@id="midas-webpay-main-1450000186"]/div[2]/div[1]/iframe')
        driver.switch_to_frame(iframe)
        html=driver.page_source
        soup=BeautifulSoup(html,"lxml")
        a=soup.find_all(attrs={'class':'icon-friend-s'})
        wb = Workbook()
        ws = wb.active
        ws.append(["    ","  ","   ","QQ "])
        for i in a:
            if i.next_sibling !=' {{el.name}}({{el.qq}})':
                #re,qq  :
                #pattern = re.compile(r'[1-9][0-9]{4,}')
                #re,    :
                #pattern = re.compile(r'(?<=\().*?(?=\))')
                #m = pattern.search(i.next_sibling)
                k=0
                for x in i.next_sibling:
                    
                    if x == '(':
                        f=k
                    if x == ')':
                        l=k
                    k=k+1
                ws.append([i.next_sibling,i.next_sibling.parent.parent.parent.parent.find(attrs={'class':'icon-more-friend'}).next_sibling,i.next_sibling[:f],i.next_sibling[f+1:l]])
                print([i.next_sibling,i.next_sibling.parent.parent.parent.parent.find(attrs={'class':'icon-more-friend'}).next_sibling,i.next_sibling[:f],i.next_sibling[f+1:l]])
    		
        wb.save(asksaveasfilename(defaultextension ='.xlsx',filetypes = [('Excel    ', '*.xlsx')]))
    
    
    #     
    driver=webdriver.Chrome()
    
    browser =driver
    browser.get("https://pay.qq.com/index.shtml")
    root = tk.Tk()
    #       
    root.title(' QQ        ——      ')
    #       
    root.geometry('400x200')
    #       (     ,     )
    button = tk.Button(root, text='          ,     ', command=callback)
    button.pack()
    root.mainloop()
    

    qq友达のリストを取得します
    これはQQ群管理から取得したもので、pandasライブラリを使って、表をエクスポートするのが超速くて、メンバー、群ニックネーム、QQ番号、性別、Q齢、入群時間、等級(ポイント)、最後の発言などの情報を得ることができます.
  • エクスポートディレクトリを選択すると、QQ群管理が自動的に開きます.
  • ログイン成功はQQ群インタフェース
  • を選択する
  • クリックウィンドウの「ログインして画面を開く」ボタン
  • import selenium
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    import tkinter as tk
    from tkinter.filedialog import askdirectory
    from lxml import etree
    import lxml
    from bs4 import BeautifulSoup
    import pandas as pd
    import time
    
    path=askdirectory()
    
    #      '
    '、'\t'
    def delNT(s): while s.startswith('
    '
    ) or s.startswith('\t'): s=s[1:] while s.endswith('\t') or s.endswith('
    '
    ): s=s[:-1] return s def callback(): a=driver.find_elements_by_class_name('icon-def-gicon') Num= len(a) time_start=time.time() for i in range(0,Num): # a=driver.find_elements_by_class_name('icon-def-gicon') #time.sleep(0.5) a[i].click() time.sleep(1) html=driver.page_source soup=BeautifulSoup(html,"lxml") groupTit=delNT(soup.find(attrs={'id':'groupTit'}).text) groupMemberNum=delNT(soup.find(attrs={'id':'groupMemberNum'}).text) while len(soup.find_all(attrs={'class':'td-no'}))<int(groupMemberNum): driver.execute_script("window.scrollTo(0,document.body.scrollHeight);") time.sleep(0.1) html=driver.page_source soup=BeautifulSoup(html,"lxml") res_elements = etree.HTML(html) table = res_elements.xpath('//*[@id="groupMember"]') table = etree.tostring(table[0], encoding='utf-8').decode() df = pd.read_html(table, encoding='utf-8', header=0)[0] try: print(str(int((time.time()-time_start)/60))+':'+str(int((time.time()-time_start)%60)),' '+str(i+1)+' ,'+str(int((i+1) / Num * 100))+'% '+groupTit+' ') writer = pd.ExcelWriter(path+'/'+groupTit+'.xlsx') df.to_excel(writer,'Sheet1') writer.save() except: k=0 for v in groupTit: if v == '(': f=k if v == ')': l=k k=k+1 writer = pd.ExcelWriter(path+'/'+groupTit[f+1:l]+'.xlsx') df.to_excel(writer,'Sheet1') writer.save() driver.find_element_by_id('changeGroup').click() time.sleep(1) driver=webdriver.Chrome() browser =driver browser.get("https://qun.qq.com/member.html") root = tk.Tk() # root.title(' QQ —— ') # root.geometry('400x200') # ( , ) button = tk.Button(root, text=' ', command=callback) button.pack() root.mainloop()