爬蟲也可以搞點花樣,空間留言系列

———————————————————————————————————————————
我初中那會,特別流行給喜歡的人刷空間留言,踩踩空間之類的非主流行爲,那個時候就是拿手機一條一條的留,每句話還得思考思考,所以那個時候特別希望能有一個軟件實現這樣的功能,現在利用python我終於實現了以前的夢想,後面我寫好了之後試了一下,發現沒以前那味了,不過,還是可以寫給大家娛樂娛樂,切勿隨便惡搞朋友,我現在已經遭受了朋友的毒打🤮!哈哈哈,估計這個在阿雪QQ實驗,我又要被暴打/(ㄒoㄒ)/~~
———————————————————————————————————————————

設計思路:

這個程序主要用到了requests庫的post方法和隨機函數庫random和一些文件的基本使用,整體代碼很簡單,可以自行修改的地方也很多,喜歡擼代碼的朋友可以改進,甚至也可以用到其他相同功能的地方上去,具體還能幹什麼,我就不泄露了。

主要函數庫:

requests and random

文件的處理:

選擇自己喜歡的句子,然後整理到txt裏面就可以了,類似我下面這樣:
在這裏插入圖片描述
對這個文件的處理:打開這個文件,讀取它,寫入列表就行了,代碼如下:

def file_word1():  # 打開第一個留言板 網易雲留言版
    words1 = []
    with open("D://py//網易雲留言板.txt", "r") as fo:
        for i in fo:
            words1.append(str(i.strip("\n").split("\t")))
    return words1

requests提交的處理:

這個要先去qq空間留言一次,獲得我們需要的東西,在控制檯裏面找到這個netword,然後點擊XHR再找到圖中高亮度的這個包
關於我是如何找到這個東西:首先這個請求一定是post方式,不是post的一律不看,然後我們之前留言了一次,我們有留言句子對照,在post方式的請求裏面找,如果找到我們留言的句子,那這個就是我們需要的包
在這裏插入圖片描述

右邊大致是這樣的:
在這裏插入圖片描述
General裏面有一個request_URL 這個網址我們要
Request Headers 這一整個我們也要
From Data 這一整個我們也要

主程序:

def post_word_list(word_list, url): # word_list 是文件轉換成的文本 url是我們之前獲取的
    string = random.choice(word_list).strip("[]").strip("''")  # 利用隨機函數,隨機選一個句子
    print(string)                            # 然後用函數對應操作了一下
    post_date = {
        "content": string,
        "hostUin": "-------",
        "uin": "----------",
        "format": "fs",
        "inCharset": "utf-8",
        "outCharset": "utf-8",
        "iNotice": "1",
        "ref": "qzone",
        "json": "1",
        "g_tk": "177400420",
        "qzreferrer": "https://user.qzone.qq.com/proxy/domain/qzs.qq.com/qzone/msgboard/msgbcanvas.html#page=1"

    }
    '''referer 和 cookie 這個會變化'''
    post_headers = {

        "authority": "h5.qzone.qq.com",
        "method": "POST",
        "path": '/proxy/domain/m.qzone.qq.com/cgi-bin/new/add_msgb?qzonetoken=c44168cfcc1a7ac91306dc6b7779a65b29522d20c18cc4a9a2309b930787bd6836761975850a34a4&g_tk=177400420',
        "scheme": "https",
        "accept": "* / *",
        "accept- encoding": "gzip, deflate, br",
        "accept - language": "zh - CN, zh;q = 0.9",
        "content - length": "319",
        "content - type": "application / x - www - form - urlencoded;charset = UTF - 8",
        "cookie": "--------",
        "origin": "https: // user.qzone.qq.com",
        "referer": "------------------",
        "sec - fetch - mode": "cors",
        "sec - fetch - site": "same - site",
        "user - agent": "Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 78.0.3904.108 Safari / 537.36"

    }
    r = requests.post(url, data=post_date, headers=post_headers)


這個程序也有個bug,從網頁中獲得的cooike會定期改變,導致這個代碼如果很久沒用了,就要重新複製上面的網頁信息,比較雞肋,之前有看過selenium的操作,也沒想到什麼對應的方法來搞這個bug,如果有知道的,歡迎評論留言,對代碼有疑問或者不懂的可以評論問我。

全部代碼:

# 每次進入網站的cookies都會變化 需要更新cookies  
import requests
import random
import time


def post_word_list(word_list, url):
    string = random.choice(word_list).strip("[]").strip("''") #這個需要對應操作 不一定按照我這樣
    print(string)
    post_date = {
        "content": string,
        "hostUin": "-------",
        "uin": "--------",
        "format": "fs",
        "inCharset": "utf-8",
        "outCharset": "utf-8",
        "iNotice": "1",
        "ref": "qzone",
        "json": "1",
        "g_tk": "177400420",
        "qzreferrer": "https://user.qzone.qq.com/proxy/domain/qzs.qq.com/qzone/msgboard/msgbcanvas.html#page=1"

    }
    '''referer 和 cookie 這個會變化'''
    post_headers = {

        "authority": "h5.qzone.qq.com",
        "method": "POST",
        "path": '/proxy/domain/m.qzone.qq.com/cgi-bin/new/add_msgb?qzonetoken=c44168cfcc1a7ac91306dc6b7779a65b29522d20c18cc4a9a2309b930787bd6836761975850a34a4&g_tk=177400420',
        "scheme": "https",
        "accept": "* / *",
        "accept- encoding": "gzip, deflate, br",
        "accept - language": "zh - CN, zh;q = 0.9",
        "content - length": "319",
        "content - type": "application / x - www - form - urlencoded;charset = UTF - 8",
        "cookie": '----------',
        "origin": "https: // user.qzone.qq.com",
        "referer": "-------------------",
        "sec - fetch - mode": "cors",
        "sec - fetch - site": "same - site",
        "user - agent": "Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 78.0.3904.108 Safari / 537.36"

    }
    r = requests.post(url, data=post_date, headers=post_headers)


def demo(word_list, url):  # 自定義留言模塊
    num = eval(input("請輸入你要留言的次數:"))
    for i in range(1, num+1):
        post_word_list(word_list, url)
        print("----------------已經留言{}次,還剩下{}次!".format(i, num-i))
        time.sleep(30)  # 30秒一條  防止後臺封ip
    print('本次留言完成!')
    time.sleep(3)
    main()


def diy_words(): # 打開自定義留言板
    words3 = []
    string = input("請輸入你想留言的語句:")
    words3.append(string)
    return words3


def file_word1():  # 打開第一個留言板 網易雲留言版
    words1 = []
    with open("D://py//網易雲留言板.txt", "r") as fo:
        for i in fo:
            words1.append(str(i.strip("\n").split("\t")))
    return words1


def file_word2():  # 打開第二個留言版 經典留言版
    words2 = []
    with open("D://py//經典留言版.txt", "r") as fo:
        for i in fo:
            words2.append(str(i.strip("\n").split("\t")))
    return words2


def choices(n):
    if n == 1:
        return diy_words()
    elif n == 2:
        return file_word1()
    elif n == 3:
        return file_word2()
    else:
        print("你的選擇有誤,請確定無誤後重新輸入:")


def main():
    print("-" * 50)
    print("該系統有三個選項經供參考:")
    print("1:自定義留言板:")
    print("2:網易雲經典評論留言板:")
    print("3:經典留言板:")
    print("-" * 50)
    n = eval(input("請按照你的需求選擇前方的序號:"))
    word_list = choices(n)  # 選擇所需功能
    url = '------------------------------'  #這個是前文提到的要獲取的URL複製上去就行
    demo(word_list, url)


main()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章