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

一、分析链接

上一篇文章指路

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

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

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)就可以通过爬虫知识获取。

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

(0)

相关推荐

  • 详解用python写一个抽奖程序

    第一次使用python写程序,确实比C/C++之类方便许多.既然这个抽奖的数据不大,对效率要求并不高,所以采用python写,更加简洁.清晰.方便. 1.用到的模块 生成随机数的模块random 用来读取excel表格的模块xlrd 2.思路:首先打开excel表格,然后读取其中某个单元格或者某行或某列的元素,进行输出或存储. 3.如何保证随机:随机的关键在于取随机数.每抽一个人之前,我们随机生成一个随机数i,i代表了读取第i个人的数据,由于i的生成是完全随机的,所以也就保证了选取的人员是完全随

  • 教你用Python实现一个轮盘抽奖小游戏

    一.Python GUI 编程简介 Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里.Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中. wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的.功能健全的 GUI 用户界面. pyq

  • 还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)

    获取评论贴的请求头与表单数据 下一篇在这里 这里,我们随便选取一个网站,获取该贴评论后的请求头,表单数据以及评论贴链接.(因为涉及敏感信息,自己看图片是哪个网址) 比如这个网站,经常有不定时的盖楼活动推出,我们随便评论一条,通过chrome F12功能,获取其请求头与表单数据. 可以看到其右侧的表单数据(评论参数)有: message:盖楼的内容,一般来说这个内容可以提供一个文档随机选择评论,可以规避自动盖楼导致评论一模一样. posttime:标识数据,一般具有唯一性,确定是否是人为操作.(各

  • python实现抽奖小程序

    本文实例为大家分享了python实现抽奖小程序的具体代码,供大家参考,具体内容如下 设计一个抽奖服务  背景:有x个奖品,要求在y天内发完:每天至少发放z个奖品:每天抽奖人数不定,事先会假设一个范围是m-n 举例:有100个奖品,要求5天内发完,每天至少发15个奖品:每天来抽奖的人估计是 2000-3000 人,希望奖品能够比较均匀,但随机的抽取出来. 接口要求:服务监听一个端口,测试程序不断连接,发送一个数字代表是第几天,比如第1-2000个请求发送1(模拟第一天来了2000人),第2001到

  • python实现公司年会抽奖程序

    本文实例为大家分享了python实现年会抽奖程序的具体代码,供大家参考,具体内容如下 发一下自己写的公司抽奖程序. 需求:公司年会要一个抽奖程序,转盘上的每一个人名是随机中奖的,中奖后的人不可以再次中奖,按住抽奖,就会一直在转,放开后,要再转一两圈才停. 刚好自己在学python cocos2d,就用这个刚学的东东,直接上源码 # coding:utf-8 # import sys # import os # sys.path.insert(0, os.path.join(os.path.dir

  • python实现大转盘抽奖效果

    本文实例为大家分享了python实现大转盘抽奖的具体代码,供大家参考,具体内容如下 选择转盘中的某一个方框,来进行抽奖 import tkinter #导入线程模块 import threading import time #导入代码的sleep 代码休眠 root = tkinter.Tk() root.title('大转盘') root.minsize(300,300) #摆放按钮 btn1 = tkinter.Button(root,text = '樱桃',bg = 'red') btn1

  • 详解python--模拟轮盘抽奖游戏

    题目: 轮盘分为三部分: 一等奖, 二等奖和三等奖; 轮盘转的时候是随机的, 如果范围在[0,0.08)之间,代表一等奖, 如果范围在[0.08,0.3)之间,代表2等奖, 如果范围在[0.3, 1.0)之间,代表3等奖, 模拟本次活动1000人参加, 模拟游戏时需要准备各等级奖品的个数. import random RewardCount = { '一等奖':(0,0.08), '二等奖':(0.08,0.3), '三等奖':(0.3,1.0) } def RewardGet(): num =

  • Python使用Tkinter实现滚动抽奖器效果

    年底,抽奖这个话题很多人都会讨论,都希望可以中奖. 接下来我就使用 Python 中的 Tkinter 模块来实现一个简单的滚动抽奖器. 一.Tkinter简介 Tkinter 是 Python 的标准 GUI(Graphical User Interface,图形用户接口)库,Python 使用 Tkinter 可以快速地创建 GUI 应用程序. 在 Python2 和 Python3 中,Tkinter 都在标准库中,无需安装即可使用.在 Python2 中,这个库叫 Tkinter ,在

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

    一.分析链接 上一篇文章指路 一般来说,我们参加某个网站的盖楼抽奖活动,并不是仅仅只参加一个,而是多个盖楼活动一起参加. 这个时候,我们就需要分析评论的链接是怎么区分不同帖子进行评论的,如上篇的刷帖链接,具体格式如下: https://club.hihonor.com/cn/forum.php?mod=post&action=reply&fid=154&tid=21089001&extra=page%3D1&replysubmit=yes&infloat=y

  • python的xpath获取div标签内html内容,实现innerhtml功能的方法

    python的xpath没有获取div标签内html内容的功能,也就是获取div或a标签中的innerhtml,写了个小程序实现一下: 源代码 [webadmin@centos7 csdnd4q] #162> vim /mywork/python/csdnd4q/z040.py #去掉最外层标签,保留其内的所有html标记和文本 def getinnerhtml(data): return data[data.find(">")+1:data.rfind("<

  • Python爬虫必备之XPath解析库

    一.简介 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历.XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上. Xpath解析库介绍:数据解析的过程中使用过正则表达式, 但正则表达式想要进准匹配难度较高, 一旦正则表达式书写错误, 匹配的数据也会出错. 网页由三部分组成: HTML, Css, JavaScript, HTML页面标签存在层级关系, 即DOM树,

  • python爬虫指南之xpath实例解析(附实战)

    目录 前言 环境的安装 属性定位 索引定位 取文本 取属性 总结 前言 XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索 XPath的选择功能十分强大,它提供了非常简明的路径选择表达式,另外,它还提供了超过100个内建函数,用于字符串.数值.时间的匹配以及节点.序列的处理等,几乎所有我们想要定位的节点,都可以用XPath来选择 xpath解析原理: 1.实现标签的定位:实例

  • Python爬虫必备之Xpath简介及实例讲解

    目录 前言 一.Xpath简介 二.Xpath语法规则 语法规则 标签定位 属性定位 索引定位 取文本内容 三.语法规则练习 总结 前言 网上已经有很多大佬发过Xpath,而且讲的都很好,我是因为刚开始学习网络爬虫,对这些基础重要知识不太了解,所以写一下来加深印象,本篇文章只是简单介绍一下Xpath及使用,总体来说比较基础. 一.Xpath简介 XPath(XML Path Language - XML路径语言),它是一种用来确定XML文档中某部分位置的语言. Xpath以XML为基础,提供用户

  • 对Xpath 获取子标签下所有文本的方法详解

    在爬虫中遇见这种怎么办 想提取名称, 但是 名称不在一个标签里 使用xpath string()方法 例如 data.xpath("string(path)") path -- 你xpath提取的路径 这里提取到父标签 string() 方法会提取子标签多有的文本内容. 以上这篇对Xpath 获取子标签下所有文本的方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 用xpath获取指定标签下的所有text的实例

    今天用xpath获取的元素下面text 是被几个b标签分割开的,我想要一次性全部获取,参考了其他人的博客是如下的做法: value_ls = html.xpath("//tr/td[7]") value = value_ls[0].xpath('string(.)').extract()[0] 但是因为我用的是 lxml, 系统报错,lxml元素没有extract() 这个方法,去掉这个方法后,可以正常使用.所以要根据自己的情况选择要不要用.extract() value_ls = h

  • python pandas读取csv后,获取列标签的方法

    在Python中,经常会去读csv文件,如下 import pandas as pd import numpy as np df = pd.read_csv("path.csv") data = np.array(df.loc[:,:]) 通过这种方式得到的data,不包含第一行,一般来说,第一行即是列标签.那么如何获取第一行的内容呢.如下 column_headers = list(df.columns.values) 以上这篇python pandas读取csv后,获取列标签的方法

  • Python爬虫基础之XPath语法与lxml库的用法详解

    前言 本来打算写的标题是XPath语法,但是想了一下Python中的解析库lxml,使用的是Xpath语法,同样也是效率比较高的解析方法,所以就写成了XPath语法和lxml库的用法 XPath 即为 XML 路径语言,它是一种用来确定 XML(标准通用标记语言的子集)文档中某部分位置的语言. XPath 基于 XML 的树状结构,提供在数据结构树中找寻节点的能力. XPath 同样也支持HTML. XPath 是一门小型的查询语言. python 中 lxml库 使用的是 Xpath 语法,是

随机推荐