纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

Python实现自动盖楼抽奖 Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)

一天一篇Python库   2021-06-06 我要评论
想了解Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)的相关内容吗一天一篇Python库在本文为您仔细讲解Python实现自动盖楼抽奖的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Python实现自动盖楼抽奖,python爬虫下面大家一起来学习吧。

一、分析链接

上一篇文章指路

一般来说我们参加某个网站的盖楼抽奖活动并不是仅仅只参加一个而是多个盖楼活动一起参加。

这个时候我们就需要分析评论的链接是怎么区分不同帖子进行评论的如上篇的刷帖链接具体格式如下:

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的值就行。

二、切分提取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)

假如我们是需要参加游戏论坛的盖楼评论活动那么就可以用下面的文本进行随机提取评论样本越多重复性越少。

盖楼评论筛选

四、盖楼刷抽奖

一般来说这种经常有活动的网站都是需要验证登录的。而各个网站的验证码算法都不相同怎么自动登录账号往往就非常关键了。

对于识别验证码我们要么用百度腾讯阿里云提供的文字识别接口但是博主试过了都无法保证百分百识别成功而且最高识别准备率都不到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这里读者可以通过代理来处理。

其实登录后随便一个帖子都有posttime与formhash两个值只要你随机打开一个帖子(url2)就可以通过爬虫知识获取。


相关文章

猜您喜欢

  • js页面滑动验证 JavaScript+html实现前端页面滑动验证

    想了解JavaScript+html实现前端页面滑动验证的相关内容吗蜜桃婷婷酱在本文为您仔细讲解js页面滑动验证的相关知识和一些Code实例欢迎阅读和指正我们先划重点:js页面滑动验证,js页面验证,js滑动验证下面大家一起来学习吧。..
  • js页面滑动验证 JavaScript+html实现前端页面滑动验证(2)

    想了解JavaScript+html实现前端页面滑动验证(2)的相关内容吗蜜桃婷婷酱在本文为您仔细讲解 js页面滑动验证的相关知识和一些Code实例欢迎阅读和指正我们先划重点:js页面滑动验证,js滑动验证,js页面验证下面大家一起来学习吧。..

网友评论

Copyright 2020 www.Shellfishsoft.com 【贝软下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式