Python爬虫類のXpathを使ってキーラベルを獲得して、自動評価蓋楼抽選を実現します(二)


一、リンクの分析
前の文章の指示
一般的には、私たちはあるウェブサイトの建物の抽選に参加します。一つだけに参加するのではなく、複数のビルを建てて一緒に参加します。
この時、私達はコメントのリンクを分析したいですが、どうやって違いますか?

https://club.hihonor.com/cn/forum.php?mod=post&action=reply&fid=154&tid=21089001&extra=page%3D1&replysubmit=yes&infloat=yes&handlekey=fastpost&inajax=1
この中で異なるスレッドを区別するための鍵はtidです。ブログコメントのリンクを見てもいいですか?同じ21089001の数字がありますか?
ブロガーのテストを経て、このサイトのコメントサイトのアドレスはtid以外のデータは全く同じです。変更する必要はありません。だから、私達は新しい招待状のコメントを切り替える時、tidの値を換えるだけでいいです。
二、分割抽出tid
読者は自分で勝手にこのサイトの招待状を開くことができます。私達は普通次のような形式の文字列の招待状のリンクを得ることができます。

https://club.hihonor.com/cn/thread-26194745-1-1.html
ここでは、文字列カットの知識を応用して、リンク文字列の種類の長い数字文字列26194745を取得する必要がある。具体的なコードは以下の通りです。

import re
#              
url_start = "https://club.hihonor.com/cn/forum.php?mod=post&action=reply&fid=4515&tid="
url_end = "&extra=page%3D1&replysubmit=yes&infloat=yes&handlekey=fastpost&inajax=1"

url = []  #     
txt_url = []  #      (    )
f = open("    .txt", "r", encoding='utf-8')
line = f.readline()  #      
while line:
    if re.match(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', line):
        txt_url.append(line.strip())  #     
    line = f.readline()  #      

datas = []
headers = []

for i in txt_url:
    url_start = "https://club.hihonor.com/cn/forum.php?mod=post&action=reply&fid=4515&tid="
    url_end = "&extra=page%3D1&replysubmit=yes&infloat=yes&handlekey=fastpost&inajax=1"
    url.append(url_start + i.split("-")[1] + url_end)
ここで、複数のコメントが必要なリンクをすべてテキストファイルに入れ、ファイルを読み込むことでリンクデータを取得します。ここでは、正規表現でリンクが正当かどうかを判断します。
リンクを巡回して分割を取得したスレッドで数字文字列を識別し、最後につなぎ合わせて本物のpostコメントリンクを取得します。
随机帖子文档
三、コメントの内容をランダムに抽出する
多くのウェブサイトのビルを建てる活動の中で、公式ウェブサイトは普通はいずれも内容の重複があるかどうかを検査して、普通は同じアカウントは何度も繰り返した内容を評論して、きっとしばらくの時間を評論することを禁止されます。
したがって、私たちはコメントの内容を多様化していく必要があります。例えば、このサイトでは携帯電話の性能を賞賛するために、階建て抽選を行います。
具体的な文字はtxtファイルの中に置いて、私達は下のコードを通して読みます。

#            
txt_contents = []
f = open("    .txt", "r", encoding='utf-8')
line = f.readline()  #      
while line:
    if line.strip() != "":
        txt_contents.append(line.strip())  #     
    line = f.readline()  #      
print(txt_contents)
count = len(txt_contents)
もし、私達はゲームフォーラムの蓋階の評論活動に参加したいなら、下のテキストでランダムに評論を抽出してもいいです。サンプルが多ければ多いほど、重複性が少ないです。
盖楼评论筛选
四、建物を建てて抽選します。
一般的に、このようなよく活動するウェブサイトはすべて登録を検証する必要があります。各サイトの検証コードのアルゴリズムは違っています。どうやって自動的にアカウントに登録するかは、往々にして非常に重要です。
識別認証コードについては、私達はバイドゥ、テンセント、アリ雲で提供された文字認識インターフェースを使いますが、ブロガーが試したことがありますが、百パーセントの識別成功は保証できません。
もし自分で機械を書いてアルゴリズムを識別する必要があるならば、機械の学習を学んだことがあるのはすべて知っているべきで、これは巨大な標識が必要で、たとえあなたが本当にしても、他の人のウェブサイトはまた検証の方式を交換するかもしれません。
このような検証コードと検証コードはずっと進歩しています。大量の表示検証コードを実現するために、多くの時間を浪費してしまいます。
だから、ブロガーの提案は自分で認証コードを入力します。つまり、このステップで認証コードを入力して、他の全自動です。完全コードは以下の通りです。

import random
import time
from selenium import webdriver
import requests
import re

#            
txt_contents = []
f = open("    .txt", "r", encoding='utf-8')
line = f.readline()  #      
while line:
    if line.strip() != "":
        txt_contents.append(line.strip())  #     
    line = f.readline()  #      
print(txt_contents)
count = len(txt_contents)


#              
url_start = "https://club.hihonor.com/cn/forum.php?mod=post&action=reply&fid=4515&tid="
url_end = "&extra=page%3D1&replysubmit=yes&infloat=yes&handlekey=fastpost&inajax=1"

url = []  #     
txt_url = []  #      (    )
f = open("    .txt", "r", encoding='utf-8')
line = f.readline()  #      
while line:
    if re.match(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', line):
        txt_url.append(line.strip())  #     
    line = f.readline()  #      

datas = []
headers = []

for i in txt_url:
    url_start = "https://club.hihonor.com/cn/forum.php?mod=post&action=reply&fid=4515&tid="
    url_end = "&extra=page%3D1&replysubmit=yes&infloat=yes&handlekey=fastpost&inajax=1"
    url.append(url_start + i.split("-")[1] + url_end)

#     
usernames = []
f = open("  .txt", "r", encoding='utf-8')
line = f.readline()  #      
while line:
    usernames.append(line.strip())  #     
    line = f.readline()  #      

for name in usernames:
    browser = webdriver.Chrome()
    browser.implicitly_wait(10)
    browser.get("https://club.hihonor.com/cn/")
    time.sleep(5)
    login_text = browser.find_element_by_xpath("//*[@id='loginandreg']/a[1]")
    login_text.click()
    username = browser.find_element_by_xpath(
'/html/body/div[1]/div[2]/div/div/div[1]/div[3]/span/div[1]/span/div[2]/div[2]/div/input')
    password = browser.find_element_by_xpath(
'/html/body/div[1]/div[2]/div/div/div[1]/div[3]/span/div[1]/span/div[3]/div/div/div/input')
    username.send_keys(name)
    password.send_keys("  ")#               ,       txt        
    sign = browser.find_element_by_xpath(
'/html/body/div[1]/div[2]/div/div/div[1]/div[3]/span/div[1]/span/div[6]/div/div/span/span')
#  10 ,           
    time.sleep(10)
    sign.click()
    time.sleep(2)
    cookie = [item["name"] + "=" + item["value"] for item in browser.get_cookies()]
    cookiestr = ';'.join(item for item in cookie)
    url2 = "https://club.hihonor.com/cn/thread-26183971-1-1.html"
    time.sleep(2)
    browser.get(url2)
    posttime = browser.find_element_by_id("posttime")
    posttime = posttime.get_attribute("value")
    formhash = browser.find_element_by_name("formhash")
    formhash = formhash.get_attribute("value")
    browser.close()
    data = {
        "formhash": formhash,
        "posttime": posttime,
        "usesig": "1",
        "message": txt_contents[0],
    }
    header = {
        "accept": "application/json, text/javascript, */*; q=0.01",
        "Accept-Encoding": "gzip, deflate, br",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Content-Length": "146",
        "sec-ch-ua": '"Google Chrome";v="87", "\"Not;A\\Brand";v="99", "Chromium";v="87"',
        "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Mobile Safari/537.36",
        "Cookie": cookiestr,
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
        "X-Requested-With": "XMLHttpRequest",
    }
    datas.append(data)
    headers.append(header)

while True:
    z = 0
    if int(time.strftime("%H%M%S")) <= 220000:
        url_num = random.sample(range(0, len(url)), len(url))
        for i in url_num:
            j = 1
            for data, header in zip(datas, headers):
                data['message'] = txt_contents[random.randint(0, count - 1)]
                res = requests.post(url=url[i], data=data, headers=header)
                if '      ' in res.text:
                    print("  {0}    ".format(j))
                else:
                    print(res.text)
                j += 1
                z += 1
            time.sleep(5)
            print("    {0} ".format(str(z)))
上のコードに示されているように、私たちのアカウントもtxtファイルで統一されています。このように複数のアカウントを同時に利用する目的を達成できます。もちろん、一般サイトの受賞は同じIPではありません。ここで読者は代理で処理できます。
実際に登録した後、任意のスレッドにはposttimeとformhashの二つの値があります。ランダムに一つのスレッドを開けば、爬虫類の知識で得られます。
ここで、Python爬虫類についてのXpathを使ってキーラベルを取得して、自動評論を実現します。蓋楼抽選(二)の文章はここまで紹介しました。もっと関連のPythonが自動的に建物を建てて抽選する内容を実現します。私達の以前の文章を検索してください。または引き続き下記の関連記事をご覧ください。これからもよろしくお願いします。