Airey 发表于 2020-3-3 22:46

python半自动化获取QQ空间说说

本帖最后由 Airey 于 2020-3-3 22:50 编辑

因使用的使用了from selenium import webdriver ,半自动化谷歌驱动,至于配置还请另行百度一下。以及还需要安装requests模块。
操作步骤:
运行代码,自动打开谷歌浏览器,随后,自动填入QQ与密码,
然后需要手动点击登入和滑块滑动,然后就不用管它了,滑块自动验证部分,本人能力有限,没尝试过。
代码中只需要修改6,7,8行配置即可运行。
import time
from selenium import webdriver
import re
import requests

QQ='xxxxxxx' #这里填写QQ号
pwd='xxxxxxxxx'#这里填写QQ密码
friendlist = #这是要访问空间的QQ号,是数组的形式

def get_g_tk(cookie):
    hashes = 5381
    for letter in cookie['p_skey']:
      hashes += (hashes << 5) + ord(letter)
    return hashes & 0x7fffffff


def login():
    browser = webdriver.Chrome()
    browser.get('https://i.qq.com/')
    browser.maximize_window()
    time.sleep(6)
    browser.switch_to.frame("login_frame")
    browser.find_element_by_id('switcher_plogin').click()
    browser.find_element_by_id('u').clear()
    browser.find_element_by_id("u").send_keys(QQ)
    browser.find_element_by_id('p').clear()
    browser.find_element_by_id("p").send_keys(pwd)
    time.sleep(15)
    print("登陆成功")
    return browser

def back_session(browser):
    my_session = requests.session()
    cooikes = browser.get_cookies()
    cookie = {}
    for elem in cooikes:
      cookie] = elem['value']
    headers = {
      'host': 'h5.qzone.qq.com',
      'accept-encoding': 'gzip, deflate, br',
      'accept-language': 'zh-CN,zh;q=0.9',
      'accept': '*/*',
      'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36'
    }
    c = requests.utils.cookiejar_from_dict(
      cookie, cookiejar=None, overwrite=True)
    my_session.headers = headers
    my_session.cookies.update(c)
    return my_session


def get_message(my_session, qq, g_tk, qzonetoken):
    url = 'https://h5.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6?uin=' + str(
      qq) + '&inCharset=utf-8&outCharset=utf-8&hostUin=' + str(
      qq) + '¬ice=0&sort=0&pos=0&num=20&cgi_host=http://taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6&code_version=1&format=jsonp&need_private_comment=1&g_tk=' + str(
      g_tk) + '&qzonetoken=' + str(qzonetoken)
    res = my_session.get(url)
    # 说说总数
    num = re.compile('"total":(.*?),').findall(res.text)
    content_list = re.compile(
      '"certified".*?"conlist":(.*?),', re.S).findall(res.text)
    if int(num) % 20 == 0:
      page = int(num) / 20
    else:
      page = int(num) / 20 + 1

    for i in range(0, int(page)):
      pos = i * 20
      url = 'https://h5.qzone.qq.com/proxy/domain/taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6?uin=' + str(
            qq) + '&inCharset=utf-8&outCharset=utf-8&hostUin=' + str(qq) + '¬ice=0&sort=0&pos=' + str(
            pos) + '&num=20&cgi_host=http://taotao.qq.com/cgi-bin/emotion_cgi_msglist_v6&code_version=1&format=jsonp&need_private_comment=1&g_tk=' + str(
            g_tk) + '&qzonetoken=' + qzonetoken
      res = my_session.get(url)
      content_list = re.compile(
            '"certified".*?"conlist":(.*?),', re.S).findall(res.text)
      time_list = re.compile(
            '"certified".*?"createTime":"(.*?)"', re.S).findall(res.text)
      for c, t in zip(content_list, time_list):
            c = c.replace('[{"con":', '')
            with open("qq_news.txt", 'a', encoding='utf-8') as f:
                f.write(t)
                f.writelines(c)
                f.write('\n')


def main():
    driver = login()
    print(driver)
    html = driver.page_source
    xpat = r'window\.g_qzonetoken = \(function\(\)\{ try\{return (.*?);\} catch\(e\)'
    qzonetoken = re.compile(xpat).findall(html)
    cookies = driver.get_cookies()
    cookie = {}
    for elem in cookies:
      cookie] = elem['value']
    g_tk = str(get_g_tk(cookie))
    my_session = back_session(driver)
    driver.close()

    for i in range(0, len(friendlist)):
      get_message(my_session, friendlist, g_tk, qzonetoken)
      time.sleep(8)

if __name__ == '__main__':
    main()



有写不好的地方,当然也有借鉴网上的写法,毕竟要向前辈们学习,走的坑会少一点,
并且还请大佬勿喷,第一次发贴,还望手下留情,谢谢。{:1_919:}{:1_919:}{:1_919:}

Airey 发表于 2020-3-4 10:16

dawsh88 发表于 2020-3-3 23:37
大佬 有没有非对方好友可以访问其空间的方法

刚才我测试了一下,只要非好友的空间没有锁起来,也是可以爬取的,而且没有访问痕迹。

Airey 发表于 2020-3-4 10:21

zxqatwa 发表于 2020-3-3 22:54
学习了,还有多少程序都发出来吧哈

程序的话,我写了一些随笔,csdn搜一下   卡卡叮    ,这是我的博客,可以看一下的。

zxqatwa 发表于 2020-3-3 22:54

学习了,还有多少程序都发出来吧哈

Cooook 发表于 2020-3-3 23:23

学到了!

dawsh88 发表于 2020-3-3 23:37

大佬 有没有非对方好友可以访问其空间的方法{:1_918:}

cherrypi 发表于 2020-3-3 23:50

谢谢分享,非常不错啊,学习一下 。

cyberim 发表于 2020-3-4 00:36

有没有微博的,我要把我的微博备份下来

hbhhwangkun 发表于 2020-3-4 08:45

谢谢分享!

Airey 发表于 2020-3-4 10:18

cyberim 发表于 2020-3-4 00:36
有没有微博的,我要把我的微博备份下来

抱歉,没有哦
页: [1] 2
查看完整版本: python半自动化获取QQ空间说说