Python 파충류 용 Xpath 키 태그 획득 자동 댓 글 빌딩 추첨 실현(2)

링크 분석
이전 글 에서 길 을 가리키다
일반적으로 우 리 는 특정한 사이트 의 빌딩 짓 기 추첨 활동 에 참가 하 는데 한 가지 만 참가 하 는 것 이 아니 라 여러 개의 빌딩 짓 기 활동 과 함께 참가한다.
이때 우 리 는 댓 글 의 링크 가 서로 다른 댓 글 을 어떻게 구분 하여 댓 글 을 달 았 는 지 분석 해 야 한다.예 를 들 어 위의 댓 글 링크 와 같은 구체 적 인 형식 은 다음 과 같다.

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 의 숫자 가 있 는 지 확인 하 실 수 있 습 니 다.
블 로 거들 의 테스트 를 통 해 이 사이트 댓 글 post 는 사이트 주 소 를 tid 를 제외 하고 다른 데 이 터 는 똑 같 아서 변경 할 필요 가 없다.그래서 우 리 는 새 댓 글 을 바 꿀 때 tid 의 값 만 바 꾸 면 된다.
2.절 분 추출 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 댓 글 링크 를 얻 습 니 다.
随机帖子文档
3.댓 글 의 내용 을 무 작위 로 추출 합 니 다.
많은 사이트 빌딩 짓 기 행사 에서 공식 사 이 트 는 일반적으로 내용 중복 여 부 를 검 측 하 는데 보통 같은 계 정 에서 여러 번 중복 되 는 내용 을 댓 글 하면 한동안 댓 글 이 금 지 될 것 이다.
그래서 우 리 는 댓 글 의 내용 을 다양 하 게 해 야 한다.예 를 들 어 이 사 이 트 는 핸드폰 의 성능 을 칭찬 하고 빌딩 을 짓 는 추첨 을 하 라 고 한다.그러면 우 리 는 댓 글 과 글 을 준비 하여 프로그램 이 랜 덤 으로 얻 을 수 있 도록 해 야 한다.
구체 적 인 문 자 는 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)
만약 에 우리 가 게임 포럼 의 빌딩 평론 활동 에 참가 해 야 한다 면 아래 의 텍스트 로 무 작위 로 평론 을 추출 할 수 있 고 샘플 이 많 을 수록 중복 성 이 적다.
盖楼评论筛选
4.빌딩 을 짓 고 추첨 을 한다.
일반적으로 이런 자주 활동 하 는 사 이 트 는 로그 인 을 검증 해 야 한다.각 사이트 의 인증 코드 알고리즘 이 다 르 기 때문에 어떻게 자동 으로 계 정 에 로그 인 하 느 냐 가 매우 중요 하 다.
식별 인증 코드 에 대해 우 리 는 바 이 두,텐 센트,아 리 클 라 우 드 가 제공 하 는 문자 인식 인 터 페 이 스 를 사용 하거나 블 로 거들 이 테스트 를 해 봐 도 100%식별 성공 을 보장 할 수 없고 최고 식별 준비 율 도 50%가 안 된다.
만약 에 스스로 기계 학습 식별 알고리즘 을 써 야 한다 면 기계 학습 을 배 운 사람 은 모두 알 아야 한다.이것 은 엄 청 난 표지 가 필요 하 다.설령 네가 정말 만들어 낸다 하 더 라 도 남 의 사이트 가 또 검증 방식 을 바 꿀 것 이다.
이런 인증 코드 와 방지 인증 코드 는 계속 발전 하고 있 으 며 레이 블 인증 코드 를 대량으로 실현 하 는 데 많은 시간 을 낭비 하고 마지막 에 사람들 이 다시 바 꿀 수 있다.
그래서 블 로 거들 의 건 의 는 자신 이 수 동 으로 인증 코드 를 입력 하 는 것 이다.이 단계 에 인증 코드 를 수 동 으로 입력 하고 다른 것 은 모두 자동 이다.전체 코드 는 다음 과 같 습 니 다:

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 가 될 수 없습니다.여기 서 독 자 는 대 리 를 통 해 처리 할 수 있 습 니 다.
사실 로그 인 후,어떤 댓 글 이 든 potstime 과 formhash 두 개의 값 이 있 습 니 다.무 작위 로 댓 글(url 2)을 열 면 파충류 지식 을 통 해 얻 을 수 있 습 니 다.
파 이 썬 파충류 가 Xpath 로 키 라벨 을 획득 하여 자동 댓 글 빌딩 추첨(2)을 실현 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 이 자동 빌딩 추첨 을 실현 하 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기