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:} dawsh88 发表于 2020-3-3 23:37
大佬 有没有非对方好友可以访问其空间的方法
刚才我测试了一下,只要非好友的空间没有锁起来,也是可以爬取的,而且没有访问痕迹。 zxqatwa 发表于 2020-3-3 22:54
学习了,还有多少程序都发出来吧哈
程序的话,我写了一些随笔,csdn搜一下 卡卡叮 ,这是我的博客,可以看一下的。 学习了,还有多少程序都发出来吧哈 学到了! 大佬 有没有非对方好友可以访问其空间的方法{:1_918:} 谢谢分享,非常不错啊,学习一下 。 有没有微博的,我要把我的微博备份下来 谢谢分享! cyberim 发表于 2020-3-4 00:36
有没有微博的,我要把我的微博备份下来
抱歉,没有哦
页:
[1]
2