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


Posted in Python onJune 07, 2021

一、分析链接

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

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

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评论链接。

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

三、随机提取评论的内容

在众多的网站盖楼活动中,官方网站一般都会检测是否有内容重复,一般同一个账号多次评论重复的内容,肯定会被禁止评论一段时间。

所以,我们需要将评论的内容多样化,比如说这个网站要我们称赞手机性能进行盖楼抽奖,那么我们就需要备用一些评论文字,方便程序随机获取。

具体文字放置在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)

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

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

四、盖楼刷抽奖

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

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

到此这篇关于Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)的文章就介绍到这了,更多相关Python实现自动盖楼抽奖内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
决策树的python实现方法
Nov 18 Python
python实现带验证码网站的自动登陆实现代码
Jan 12 Python
详解python如何调用C/C++底层库与互相传值
Aug 10 Python
Python中.py文件打包成exe可执行文件详解
Mar 22 Python
Python时间序列处理之ARIMA模型的使用讲解
Apr 02 Python
python版百度语音识别功能
Jul 09 Python
Python识别快递条形码及Tesseract-OCR使用详解
Jul 15 Python
django-rest-swagger对API接口注释的方法
Aug 29 Python
python中class的定义及使用教程
Sep 18 Python
python实现获取单向链表倒数第k个结点的值示例
Oct 24 Python
Python enumerate内置库用法解析
Feb 24 Python
Python 生成短8位唯一id实战教程
Jan 13 Python
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
Jun 07 #Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 #Python
Pytorch中Softmax与LogSigmoid的对比分析
Jun 05 #Python
Pytorch反向传播中的细节-计算梯度时的默认累加操作
pytorch 梯度NAN异常值的解决方案
Jun 05 #Python
pytorch 权重weight 与 梯度grad 可视化操作
PyTorch 如何检查模型梯度是否可导
You might like
php随机抽奖实例分析
2015/03/04 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
静态页面的值传递(三部曲)
2006/09/25 Javascript
Jquery 学习笔记(一)
2009/10/13 Javascript
Javascript的一种模块模式
2010/09/08 Javascript
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
利用try-catch判断变量是已声明未声明还是未赋值
2014/03/12 Javascript
javascript的事件触发器介绍的实现
2014/06/05 Javascript
JavaScript多线程详解
2015/08/12 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
Node.js学习之地址解析模块URL的使用详解
2017/09/28 Javascript
vue-cli 3.x 修改dist路径的方法
2018/09/19 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
2020/07/22 Javascript
深入讲解Python中面向对象编程的相关知识
2015/05/25 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
Python Selenium 之关闭窗口close与quit的方法
2019/02/13 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
python实现beta分布概率密度函数的方法
2019/07/08 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
2019/07/31 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
超市国庆节促销方案
2014/02/20 职场文书
北京颐和园导游词
2015/01/30 职场文书
试用期辞职信范文
2015/03/02 职场文书
公司年会开场白
2015/06/01 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
Python通过m3u8文件下载合并ts视频的操作
2021/04/16 Python