新四季網

python爬蟲如何防止被封ip(python爬蟲實戰一鍵檢測前女友是否屏蔽你的空間)

2023-04-25 08:44:00 2

最近發現有人QQ空間對我展開了屏蔽,咱們也不知道怎麼惹到人家了,一氣之下寫了一個小爬蟲看看到底誰把我屏蔽了。寫小本本記下來!!!

準備工作

python環境:python3.7.4第三方庫環境:requestslxmlthreadpoolselenium

利用selenium模擬登陸獲取cookie並保存到本地

def search_cookie: # 先檢測一下是否運行過 if not __import__('os').path.exists('cookie_dict.txt'): get_cookie_json with open('cookie_dict.txt', 'r') as f: cookie=json.load(f) return cookie def get_cookie_json: # 無頭selenium登陸 qq_number = input('請輸入qq號:') password = __import__('getpass').getpass('請輸入qq密碼:') from selenium import webdriver login_url = 'https://i.qq.com/' chrome_options =Options chrome_options.add_argument('--headless') driver = webdriver.Chrome(options=chrome_options) driver.get(login_url) driver.switch_to_frame('login_frame') ]').click time.sleep(1) ]').send_keys(qq_number) ]').send_keys(password) time.sleep(1) ]').click time.sleep(1) cookie_list = driver.get_cookies cookie_dict = {} for cookie in cookie_list: if 'name' in cookie and 'value' in cookie: cookie_dict[cookie['name']] = cookie['value'] with open('cookie_dict.txt', 'w') as f: json.dump(cookie_dict, f) return True

找到查看好友的接口

進入我的空間,點擊 F12 檢查界面,將 Network 清空後點擊好友界面。

首選盲猜好友列表含有friend欄位。直接選擇搜索發現出來一些數據,挨個查找之後發現好友欄位。保存當前獲得的 url 供日後查詢。

破解data裡面的加密參數

看到只有一個 g_tk 加密參數就很激動,就一個加密!去 Sources 裡面搜索 g_tk 取值到底是什麼加密,發現是個函數點進去看後發現是個簡單的小加密。可以寫 python 代碼。

Python代碼如下:

def get_g_tk: # QQ空間的加密算法 p_skey = cookie['p_skey'] h = 5381 for i in p_skey: h = (h << 5) ord(i) g_tk = h & 214748364 return g_tk

在QQ空間好友欄獲取好友列表

拿到加密參數後,接下來我們就只需要進剛才所說的空間好友欄頁面將所有的好友的QQ號抓下來,用urllib.parse.urlencode(data)將參數轉成我們常見的url後面綴了一長串&&&的形式與原始連結拼接,然後就可以帶上cookies發送請求獲取json數據,

def get_friends_uin(g_tk): # 獲得好友的QQ號信息 yurl = 'https://user.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/friend_ship_manager.cgi?' data = { 'uin': cookie['ptui_loginuin'], 'do': 1, 'g_tk': g_tk } url = yurl urllib.parse.urlencode(data) res=requests.get(url, headers = headers, cookies = cookie) r = res.text.split('(')[1].split(')')[0] friends_list=json.loads(r)['data']['items_list'] friends_uin=[] for f in friends_list: friends_uin.append(f['uin']) return friends_uin

找到屏蔽我的"狠人"

拿到好友的QQ號之後,咱們就能直接訪問好友的空間了,但是好友設置了拒絕訪問,一定要拿小本本記下來!

def get_blacklist(friends): # 查詢被擋好友的QQ號,用小本本記下來! access_denied=[] # 拉黑筆記,小本本記下來! yurl = 'https://user.qzone.qq.com/' for friend in friends: print("開始檢查:" str(friend)) url = yurl str(friend) res = requests.get(url,headers=headers,cookies=cookie) tip = etree.HTML(res.text).xpath('/html/body/div/div/div[1]/p/text') if len(tip) > 0: #if tip[0][:7] == "主人設置了權限": print(str(friend) "把我拉黑了!") access_denied.append(friend) return access_denied

拉黑這幫重色輕友的人!進入自己心靈想進去的地方,拉黑他們!

發現只有一個 post 請求,那應該就只能是這個了。

看了眼所需要的參數,自己的號,拉黑的號,自己的空間,加上一個無用參數和剛才所獲得加密參數。

越想越氣,寫代碼!

def pull_black: # 拉黑,必須拉黑! global cookie cookie = search_cookie with open('access_denied.txt', 'r') as f: access_denied = f.readlines for fake_friend in access_denied: fake_friend = fake_friend.split('\n')[0] yurl = "https://user.qzone.qq.com/proxy/domain/w.qzone.qq.com/cgi-bin/right/cgi_black_action_new?" g_tk = get_g_tk url_data = {'g_tk': g_tk} data = { 'uin': cookie['ptui_loginuin'], 'action': '1', 'act_uin': fake_friend, 'fupdate': '1', 'qzreferrer': 'https://user.qzone.qq.com/1223411083' } url = yurl urllib.parse.urlencode(url_data) res=requests.post(url, headers = headers, data=data, cookies = cookie) print(str(fake_friend) "已被您拉黑") print("都拉黑了!解氣!!")

全部代碼

import timeimport jsonimport reimport urllibimport requestsfrom lxml import etreeimport threadpoolheaders = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}def search_cookie: if not __import__('os').path.exists('cookie_dict.txt'): get_cookie_json with open('cookie_dict.txt', 'r') as f: cookie=json.load(f) return cookiedef get_cookie_json: # 無頭selenium登陸 qq_number = input('請輸入qq號:') password = __import__('getpass').getpass('請輸入qq密碼:') from selenium import webdriver from selenium.webdriver.chrome.options import Options login_url = 'https://i.qq.com/' chrome_options =Options chrome_options.add_argument('--headless') driver = webdriver.Chrome(options=chrome_options) driver.get(login_url) driver.switch_to_frame('login_frame') ]').click time.sleep(1) ]').send_keys(qq_number) ]').send_keys(password) time.sleep(1) ]').click time.sleep(1) cookie_list = driver.get_cookies cookie_dict = {} for cookie in cookie_list: if 'name' in cookie and 'value' in cookie: cookie_dict[cookie['name']] = cookie['value'] with open('cookie_dict.txt', 'w') as f: json.dump(cookie_dict, f) return Truedef get_g_tk: # QQ空間的加密算法 p_skey = cookie['p_skey'] h = 5381 for i in p_skey: h = (h << 5) ord(i) g_tk = h & 214748364 return g_tkdef get_friends_uin(g_tk): # 獲得好友的QQ號信息 yurl = 'https://user.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/friend_ship_manager.cgi?' data = { 'uin': cookie['ptui_loginuin'], 'do': 1, 'g_tk': g_tk } url = yurl urllib.parse.urlencode(data) res=requests.get(url, headers = headers, cookies = cookie) r = res.text.split('(')[1].split(')')[0] friends_list=json.loads(r)['data']['items_list'] friends_uin=[] for f in friends_list: friends_uin.append(f['uin']) return friends_uindef get_blacklist(friends): # 查詢被擋好友的QQ號,用小本本記下來! access_denied=[] # 拉黑筆記,小本本記下來! yurl = 'https://user.qzone.qq.com/' for friend in friends: print("開始檢查:" str(friend)) url = yurl str(friend) res = requests.get(url,headers=headers,cookies=cookie) tip = etree.HTML(res.text).xpath('/html/body/div/div/div[1]/p/text') if len(tip) > 0: #if tip[0][:7] == "主人設置了權限": print(str(friend) "把我拉黑了!") access_denied.append(friend) return access_denied def pull_black: # 拉黑,必須拉黑! global cookie cookie = search_cookie with open('access_denied.txt', 'r') as f: access_denied = f.readlines for fake_friend in access_denied: fake_friend = fake_friend.split('\n')[0] yurl = "https://user.qzone.qq.com/proxy/domain/w.qzone.qq.com/cgi-bin/right/cgi_black_action_new?" g_tk = get_g_tk url_data = { 'g_tk': g_tk } data = { 'uin': cookie['ptui_loginuin'], 'action': '1', 'act_uin': fake_friend, 'fupdate': '1', 'qzreferrer': 'https://user.qzone.qq.com/1223411083' } url = yurl urllib.parse.urlencode(url_data) res=requests.post(url, headers = headers, data=data, cookies = cookie) print(str(fake_friend) "已被您拉黑") print("都拉黑了!解氣!!") def recording: # 主函數 global cookie cookie = search_cookie g_tk = get_g_tk friends_uin = get_friends_uin(g_tk) access_denied = get_blacklist(friends_uin) print(f"一共有{len(access_denied)}人把你拉黑了!") with open('access_denied.txt', 'w') as f: for a in access_denied: f.write(str(a) '\n')if __name__ == '__main__': # 運行 recording pull_black

想了解更多爬蟲騷操作嗎???想獲得從Python零基礎入門Python爬蟲學習資料嗎???

關注 轉發。私信小編「爬蟲」即可。

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了