掌握了这种技术,天下再也没有难的回复的帖子
我相信,很多同学都在逛论坛的时候都会遇到的问题:有的帖子是标注着“回复查看更多”;或者有的论坛将回复数量和账号等级挂钩(比如草留)。个人感觉,这是个比较蛋疼的问题。第一,你回复帖子,需要打开论坛,再打开帖子,然后找到回复的位置,输入要回复的内容,再点击回复,虽然一顿骚操作,但是费时间又费精力。第二,有些回复帖子之间是有时间间隔的,这样就不能够快速的升级账号和被迫等待几秒到几十分钟。
所以,我又想到了,Python,这个非常好用的可以让我们玩乐的工具。没错,在我眼中,Python就是一种很好用的工具。
这里,我主要针对1024网站的回复问题做实战处理,原因有以下几点:
- 1024的账号是有等级之分的,处在“新手”区的账号,限制很多,若是想要升级成“侠客”,途径只有发帖,或者回复别人。
- 1024新手回帖是有时间间隔的。1024秒,约17分钟。而且一天只能回复10贴。
- 秉着升级账号的原则,同时还能赚取U,和乐而不为呢。
那么好,我们要写一个Python程序,来实现我们几个目的:
- 能够自动回复帖子。
- 能够记录回复结果,检测回复是否成功。
- 最好能够有一个类似定时器的东西,在1024秒过后,能够再次运行。
OK,我们来简单拆解一下我们的问题:一个定时执行的模块;一个自动回复的模块。在自动回复模块中,我们通过账号名密码来登录网站,同时,挑出来回复的帖子,再执行回复操作。
那么,我们就先从第二个自动回复模块来做起。第一步,我们来做登录功能。
登录
Python模拟用户登录论坛。这个是一个很普遍的任务。你百度,能搜出来一大堆东西。我们这里主要用到的,就是通过抓包,分析http post的参数,然后自己通过Python来模拟一个http post请求,来实现登录。
第一步,抓包
抓包的工具有很多种,比较好用的比如windows的filter,Mac下面的charles,这些都只是基础功能。功能最强大的还应该是wireshark。我这里就选用charles来做处理吧。至于charles的配置和使用,参考这篇文章,这里不做多讲。
登录,首先我们来到登录界面:
登录界面看到界面和其他登录页面一样,我们输入账号密码,点击“提交”按钮,我们就会发出一个http post请求。在charles中可以抓到。这里我们主要就是关心的两点:
- http post的Header
- http post的Form
因为这两个是我们需要在后面自己构造的。
我们抓到的结果如下:
header form这样,我们就照葫芦画瓢,可以构造出来登录数据了。
第二步,构造数据
这里,我们需要通过request.session()方法来请求,在方法传入参数中,有我们自己构建http的headers和form数据。那么我们就通过上图的参数,构造出来大概张这个样子:
login_values = {
"pwuser": "XXXXX",
"pwpwd": "XXXXX",
"hideid": "0",
"forward": "http://dc.itbb.men/thread0806.php?fid=7",
"jumpurl": "http://dc.itbb.men/thread0806.php?fid=7",
"step": "2"
}
login_header = {
"Referer": login_url,
"User-Agent": "",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6,ru;q=0.5",
"Connection": "keep-alive"
}
第三步,请求
有了values和header,我们就需要调用session来做请求就好。
session = requests.session()
login_response = session.post(login_url, data=login_values, headers=login_header)
session.post()方法返回的是一个http的response。如果在开发的时候想看返回结果,是可以通过Debug的模式来看到的。
这里要多说一下为什么要用requests的session而不是直接request.get。
根本原因是需要保持长时间的登录状态。我们如果要回复帖子,就要保持一个账号已经登录的状态,session正好能够满足我们的需求。只要登录成功,session就会保存状态,主要就是cookie的保存。后面的一系列请求,只要调用session.get()或者session.post()方法皆可以了。我们拿到的cookie,请求服务器,服务器会判断我们为已经登录的状态的。为什么会是这样子,这个就是Cookie的作用了。
登录完成了,我们接下来就是要找板块和挑一个回复的帖子了。
我这里使用的还是BeautifulSoup4来做html的解析和查找,方法和原理,都在之前的Python文章中讲过了『【Python实战】手把手超详细教程教你Scrapy爬达盖尔社区,有彩蛋』和『【Python实战】用Scrapy编写“1024网站种子吞噬爬虫”,送福利』,可以看手把手的实战讲解文章中的讲解,超级详细。这里为了节省时间,就不多说了。
回帖
我们这里就直接跳到了我们做回帖post处理。同样,我们也是需要通过charles来抓取post请求的参数。最终也得拼凑出来我们自己的value和header。过程和登录差不多。抓取分析之后,我们自己拼凑出来的header大概就是长这个样子:
comment_header = {
"Referer": post_url,
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6,ru;q=0.5",
"Connection": "keep-alive",
"Content-Length": "252",
"Cache-Control": "max-age=0"
}
至于form数据的组成,我们这里通过分析html数据发现,post请求里的form数据,是将html的form标签下,所有的input的“name”和“value”做成键值对,拼凑起来的。我们通过BeautifulSoup来抓取数据组成键值对,构造出来form数据。
那最后我们拿到之前的session对象,发送一个post请求即可。
comment_response = session.post(post_base_url, data=post_data, headers=comment_header)
DONE。以上就是模拟登录并自动回帖的代码。
定时器
由于论坛的特殊性,回复间隔必须是1024秒,所以,我们还得做一个定时执行任务的模块,用来定时执行我们的回复代码。这里我则是使用了python的os.system()方法来执行模块。至于1024秒的间隔,这个只需要写一个while循环,通过计算时间,来做相应的操作即可。Python的datatime库里面还是提供了很丰富的操作,而且很方便。
def run_Task():
os.system("python login.py")
def clock_timer(schedule_time):
count = 0
flag = 0
while True:
if count == 11:
print("------- Count time is 11. FINISHED.")
break
cur_time = datetime.datetime.now()
if cur_time == schedule_time:
print("------- Run time: " + str(cur_time) + "\n------- CountTime: " + str(count))
count = count + 1
run_Task()
flag = 1
else:
if flag == 1:
flag = 0
schedule_time = schedule_time + datetime.timedelta(seconds=1050)
print("------- Next schedule time: " + str(schedule_time))
if __name__ == '__main__':
cur_time = datetime.datetime.now()
print("------- Start time: " + str(cur_time))
schedule_time = cur_time + datetime.timedelta(seconds=2)
print("------- Schedule time: " + str(cur_time))
clock_timer(schedule_time)
每天只需要执行定时任务的代码就可以了,非常的简单和方便。一天10次回贴,轻松搞定。相信用不了几天,就可以升级成“侠客”了,哈哈哈哈啊。
代码就是这样,关注公众号『皮克啪的铲屎官』,回复『回帖』即可得到源码。还有惊喜等着你哦~
最后扯一句,文中最关键的就是讲到的思路,网站论坛千千万,只要掌握了思路,就能够应对所有。大家有什么问题,可以给公众号留言,或者文章留言,我都会一一解答。大家一起进步。
推荐阅读:
【Python实战】手把手超详细教程教你Scrapy爬达盖尔社区,有彩蛋
【Python实战】用Scrapy编写“1024网站种子吞噬爬虫”,送福利
【Python实战】用代码来访问1024网站,送福利
网友评论