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元组操作实例分析【创建、赋值、更新、删除等】
Jul 24 Python
django上传图片并生成缩略图方法示例
Dec 11 Python
对numpy中二进制格式的数据存储与读取方法详解
Nov 01 Python
Python单元测试unittest的具体使用示例
Dec 17 Python
Python实现求两个数组交集的方法示例
Feb 23 Python
python画图--输出指定像素点的颜色值方法
Jul 03 Python
Python操作Mongodb数据库的方法小结
Sep 10 Python
python处理excel绘制雷达图
Oct 18 Python
Django查询优化及ajax编码格式原理解析
Mar 25 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
Jun 18 Python
python基于tkinter制作m3u8视频下载工具
Apr 24 Python
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Jun 03 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
CI框架表单验证实例详解
2016/11/21 PHP
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
js实现动态改变字体大小代码
2014/01/02 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
从数据库读取数据后将其输出成html标签的三种方法
2014/10/13 Javascript
jquery操作对象数组元素方法详解
2014/11/26 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
详解JavaScript中return的用法
2017/05/08 Javascript
微信小程序与php 实现微信支付的简单实例
2017/06/23 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
jquery实现掷骰子小游戏
2019/10/24 jQuery
微信小程序服务器日期格式化问题
2020/01/07 Javascript
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
vue 判断元素内容是否超过宽度的方式
2020/07/29 Javascript
[02:58]献给西雅图的情书_高清
2014/05/29 DOTA
Python中urllib+urllib2+cookielib模块编写爬虫实战
2016/01/20 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
2016/06/23 Python
python实现beta分布概率密度函数的方法
2019/07/08 Python
英国文胸专家:AmpleBosom.com
2018/02/06 全球购物
工作态度检讨书
2014/02/11 职场文书
会计助理岗位职责
2014/02/17 职场文书
常务副总经理岗位职责
2014/04/12 职场文书
感恩老师演讲稿600字
2014/08/28 职场文书
大学生简短的自我评价
2014/09/12 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
生产实习心得体会范文
2016/01/22 职场文书
学校学习型党组织建设心得体会
2019/06/21 职场文书