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排序搜索基本算法之归并排序实例分析
Dec 08 Python
Python实现备份MySQL数据库的方法示例
Jan 11 Python
解决Python的str强转int时遇到的问题
Apr 09 Python
django将图片上传数据库后在前端显式的方法
May 25 Python
python cs架构实现简单文件传输
Mar 20 Python
Django中使用 Closure Table 储存无限分级数据
Jun 06 Python
python二进制文件的转译详解
Jul 03 Python
django迁移数据库错误问题解决
Jul 29 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
Aug 13 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 Python
Python内置包对JSON文件数据进行编码和解码
Apr 12 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函数serialize()与unserialize()的使用方法
2014/08/19 PHP
PHP命令行脚本接收传入参数的三种方式
2014/08/20 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
2018/12/06 PHP
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
2012/02/27 Javascript
js中复制行和删除行的操作实例
2013/06/25 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
jQuery不兼容input的change事件问题解决过程
2014/12/05 Javascript
angularjs的一些优化小技巧
2014/12/06 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
jQuery绑定自定义事件的魔法升级版
2016/06/30 Javascript
JavaScript用构造函数如何获取变量的类型名
2016/12/23 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
vue实现图书管理demo详解
2017/10/17 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
vue 页面加载进度条组件实例
2018/02/05 Javascript
浅谈Vue内置component组件的应用场景
2018/03/27 Javascript
js实现unicode码字符串与utf8字节数据互转详解
2019/03/21 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
解决python读取几千万行的大表内存问题
2018/06/26 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
python检查目录文件权限并修改目录文件权限的操作
2020/03/11 Python
python3 logging日志封装实例
2020/04/08 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
美国校园市场:OCM
2017/06/08 全球购物
机关作风建设自查报告
2014/10/22 职场文书
车间主任岗位职责
2015/02/03 职场文书
个人自荐书范文
2015/03/09 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
2015年后备干部工作总结
2015/05/15 职场文书