生活中经常会有一些刷票、刷热搜、刷访问量的情况,其原理是怎么实现的呢,本篇研究了利用脚本刷取网页访问量关键词搜索频率,声明如下:本篇仅供学习交流,作者水平有限如有出入请纠正,请勿恶意使用封号后果自负。

总结一下,我们的目标就是以脚本程序重复实现伪装浏览器方式的搜索请求,并骗过服务器的过滤或者检查。

1.首先打开目标网站,如下图所示:

以chorme浏览器为例,打开网页开发者工具(F12),切换到Network ,Doc标签页,查看headers中有数据请求头,以图中为例Request Method声明Get方法,于是我们这里也采用Request.Get()方法,其他的比如POST等,根据需要使用,会有不同的数据头格式。

requests.get(' ')
requests.post(' ')
requests.put('  ')
requests.delete('  ')
requests.head('  ')
requests.options('  ')

2.接下来简单讲一下,怎么发送请求数据:

import requests
url ='http://rs.xidian.edu.cn/bt.php?mod=browse&t=all'
r = requests.get(url)
print(r)
r.status_code
print(r.text)

直接使用request.get方法,会返回状态码r:

1.信息提示

0代表本地响应成功

100 - Continue 初始的请求已经接受,客户应当继续发送请求的其余部分

101 - Switching Protocols 服务器将遵从客户的请求转换到另外一种协议

2.请求成功

200 - OK 一切正常,对GET和POST请求的应答文档跟在后面

201 - Created 服务器已经创建了文档,Location头给出了它的URL

202 - Accepted 已经接受请求,但处理尚未完成

203 - Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝,非权威性信息

204 - No Content 没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的

205 - Reset Content 没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容

206 - Partial Content 客户发送了一个带有Range头的GET请求,服务器完成了它

3.重定向

300 - Multiple Choices 客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。

301 - Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。

302 - Found 类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”。出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。注意这个状态代码有时候可以和301替换使用。例如,如果浏览器错误地请求 http://host/~user (缺少了后面的斜杠),有的服务器返回301,有的则返回302。严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。

303 - See Other 类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取(HTTP 1.1新)。

304 - Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

305 - Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取

4.客户端错误

400 - Bad Request 请求出现语法错误。

401 - Unauthorized 访问被拒绝,客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。IIS 定义了许多不同的 401 错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在 IIS 日志中显示:

403 - Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。禁止访问:IIS 定义了许多不同的 403 错误,它们指明更为具体的错误原因:

参考:https://blog.csdn.net/l_mloveforever/article/details/82892292

返回200即请求发送成功。

3.根据需要更改,get()命令的参数,参考API:https://2.python-requests.org//en/master/api/

根据自己需要选择需要更改的参数加入。

4.获取代理IP,伪装IP以及请求头中的浏览器标识,防止服务器过滤,大家好像都用的西刺代理:http://www.xicidaili.com/

import urllib2
import time
from multiprocessing import Pool#多进程
import random
from lxml import etree  #解析
def GetUserAgent():'''功能:随机获取HTTP_User_Agent'''user_agents=["Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)","Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)","Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)","Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)"]user_agent = random.choice(user_agents)return user_agentdef getProxies():'''功能:爬取西刺高匿IP构造原始代理IP池'''init_proxies = []##爬取前十页for i in range(1,11):print("####")print("####爬取第"+str(i)+"页####")print("####")        print("IP地址\t\t\t端口\t存活时间\t\t验证时间")url = "http://www.xicidaili.com/nn/"+str(i)user_agent = GetUserAgent()headers=("User-Agent",user_agent)opener = urllib2.build_opener() opener.addheaders = [headers] try:data = opener.open(url,timeout=5).read()except Exception as er:print("爬取的时候发生错误,具体如下:")print(er)selector=etree.HTML(data) ip_addrs = selector.xpath('//tr[@class="odd"]/td[2]/text()')  #IP地址port = selector.xpath('//tr[@class="odd"]/td[3]/text()')  #端口sur_time = selector.xpath('//tr[@class="odd"]/td[9]/text()')  #存活时间ver_time = selector.xpath('//tr[@class="odd"]/td[10]/text()')  #验证时间for j in range(len(ip_addrs)):ip = ip_addrs[j]+":"+port[j] init_proxies.append(ip)#输出爬取数据 print(ip_addrs[j]+"\t\t"+port[j]+"\t\t"+sur_time[j]+"\t"+ver_time[j])return init_proxiesdef testProxy(curr_ip):'''功能:验证IP有效性@curr_ip:当前被验证的IP'''tmp_proxies = []#socket.setdefaulttimeout(10)  #设置全局超时时间tarURL = "http://www.baidu.com/" user_agent = GetUserAgent()proxy_support = urllib2.ProxyHandler({"http":curr_ip})opener = urllib2.build_opener(proxy_support)opener.addheaders=[("User-Agent",user_agent)]urllib2.install_opener(opener)try:res = urllib2.urlopen(tarURL,timeout=5).read()if len(res)!=0:tmp_proxies.append(curr_ip)except urllib.error.URLError as er2: if hasattr(er2,"code"):print("验证代理IP("+curr_ip+")时发生错误(错误代码):"+str(er2.code))if hasattr(er2,"reason"):print("验证代理IP("+curr_ip+")时发生错误(错误原因):"+str(er2.reason))except Exception as er:print("验证代理IP("+curr_ip+")时发生如下错误):")print(er)time.sleep(2)return tmp_proxiesdef mulTestProxies(init_proxies):'''功能:多进程验证IP有效性@init_proxies:原始未验证代理IP池'''pool = Pool(processes=7)fl_proxies = pool.map(testProxy,init_proxies)pool.close()pool.join()  #等待进程池中的worker进程执行完毕return fl_proxiesif __name__ == '__main__':#---(1)获取代理IP池init_proxies = getProxies()  #获取原始代理IPtmp_proxies = mulTestProxies(init_proxies) #多进程测试原始代理IP  proxy_addrs = []for tmp_proxy in tmp_proxies:if len(tmp_proxy)!=0:proxy_addrs.append(tmp_proxy)

4.刷取访问,以下是我刷取校园网上某一关键词的搜索频次的代码,因为校园网仅限内部IP访问,故没有采用IP代理.

import requests
import time
import random
import os
urlGroup = ["http://rs.xidian.edu.cn/bt.php?w=%E6%9A%91%E5%81%87%E5%BF%AB%E4%B9%90%EF%BC%81&c=&t=all","http://rs.xidian.edu.cn/bt.php?w=%E9%98%BF%E4%B8%BD%E5%A1%94&c=&t=all","http://rs.xidian.edu.cn/forum.php"]
AgentGroup = ["Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"]# 自定义代理ip,此处的ip需要自行更换,只需要将ip和port按格式拼接即可,可以去网上免费代理中寻找:http://www.xicidaili.com/nn
#proxies = {"https": "https://192.168.0.94:8080", "http": "http://127.0.0.1:1080"}
for i in range(5000):start_url = random.choice(urlGroup)UserAgent = random.choice(AgentGroup)headers = {"Cookie": "  ","Host": "rs.xidian.edu.cn","Referer": "http://rs.xidian.edu.cn/bt.php?mod=browse&t=all","User-Agent": UserAgent,"X-Requested-With": "XMLHttpRequest"}response = requests.get(url=start_url, headers=headers)#, proxies=proxiesprint(response,i)   # 返回值:<Response [200]>delay_time = random.uniform(0,4)      time.sleep(delay_time)
print('Done')
#os.system('shutdown -s -t 3')
#os.system('shutdown -a')

参照代码做一些解释:

首先是访问目标地址,我做了一些随机切换,以避免长时间单一关键词搜索造成服务器过滤;

其次是请求头,如下图所示:

参考浏览器使用的请求方式,将cookie,Host,Referer(上一个目标地址),User-Agent等引入程序的请求头,并做了浏览器标识的随机切换,再加上随机延时,都是为了伪装防止服务器过滤。

然后是IP,这里没有做,可以考虑再加入多个请求IP的随机切换,能够达到更好的伪装效果。

刷取热搜关键词搜索频次效果如下图所示:

Python脚本刷网页访问量或关键词搜索频率相关推荐

  1. 网页版python叫什么-python脚本和网页有何区别

    Python是一种计算机程序设计语言,一种面向对象的动态类型语言,一种脚本语言.最初被设计用于编写自动化脚本(shell)的,常用于各种服务器的维护和自动化运行.它具有丰富和强大的库.它常被昵称为胶水 ...

  2. python实现微信自动加群_老司机用python脚本刷微信读书的时长

    微信读书有一个鼓励机制, 一周阅读5小时可兑换10书币,每周日晚清空一周的总读书时长,没兑换的时长不计入下一周(1书币 == 1块钱) 作为一个经常加班的程序猿, 一周刷5个小时, 有点困难, 所以只 ...

  3. 用python刷微信阅读_老司机用python脚本刷微信读书的时长

    微信读书有一个鼓励机制, 一周阅读5小时可兑换10书币,每周日晚清空一周的总读书时长,没兑换的时长不计入下一周(1书币 == 1块钱) 作为一个经常加班的程序猿, 一周刷5个小时, 有点困难, 所以只 ...

  4. python单击url下载网页文件_使用不带url的python脚本从网页下载文件,调用onClick函数 - javascript...

    有一个网页带有链接"单击下载",单击该链接可以下载文件. 我可以通过转到网页并单击此链接来手动下载此文件,但是我需要通过python脚本下载此文件. 如果我看到源代码,则可以看到锚 ...

  5. Python脚本刷点击率。

    新建一个文本文件,并且改名为shua.py 内容: import urllib2 import timeit import thread import time i = 0 mylock = thre ...

  6. 网页运行python脚本_python脚本和网页有何区别

    Python是一种计算机程序设计语言,一种面向对象的动态类型语言,一种脚本语言.最初被设计用于编写自动化脚本(shell)的,常用于各种服务器的维护和自动化运行.它具有丰富和强大的库.它常被昵称为胶水 ...

  7. 举个栗子~Tableau 技巧(241):用 Python 脚本提取文本内容中的关键词

    经常有数据粉反馈:在处理文本内容的时候,是否有快速提取内容关键词的方法呢? 方法有的,可以试试 Python.这里,我们来分享:如何在 Tableau 中利用 Python 脚本从文本内容提取关键词. ...

  8. python批量删除微信好友_黑科技,Python 脚本帮你找出微信上删除你好友的人(附视频教程)...

    " 清理下[微笑],不用回.你的朋友圈没事也该清清了,打开设置,通用,功能,群助手,全选,把我的信息粘贴一下,就可以了,发送就知道谁把你删了,方便你清人,不清不知道 ,一清吓一跳." ...

  9. 黑科技,Python 脚本帮你找出微信上删除你好友的人

    编者按:本文来自稀土掘金江昪编译自 Github:0x5e/wechat-deleted-friends  " 清理下[微笑],不用回.你的朋友圈没事也该清清了,打开设置,通用,功能,群助手 ...

最新文章

  1. SQL Server 中print Datetime类型问题
  2. 公共互联网网络安全突发事件应急预案_安徽新规:发生重大突发事件,官方5小时内必须发声...
  3. 深圳办理cdn经营许可证_深圳危化品经营许可证申请流程怎么申请?办理危化学品经营许可证...
  4. pat 乙级 1026 程序运行时间(C++)
  5. ubuntu/wireshark --Lua: Error during loading: [string /usr/share/wireshark/init.lua]:45问题解决
  6. 架构设计:负载均衡层设计方案(1)——负载场景和解决方式
  7. 找mysql软件的配置文件_mysql 查看当前使用的配置文件my.cnf的方法
  8. 深度学习训练出来的损失不收敛_学习率设置技巧,使用学习率来提升我们的模型...
  9. 在线手机号码提取工具
  10. 搭载Apple芯片的Mac如何使用macOS恢复?
  11. 一共有多少种操作系统
  12. python: SHA256算法的实现和消息的哈希散列值计算
  13. Django中render、render_to_response、HttpResponse、JsonResponse、Response的使用
  14. 优秀的Web前端开发工程师需要具备的4个条件
  15. 去水印小程序源码,全新界面无加密,平台支持微信小程序和QQ小程序。支持解析抖音、快手、皮皮虾和微视等平台。带PHP下载接口。支持微信QQ流量主
  16. 【目标流畅阅读文献】kick off
  17. vue饿了么项目实现评论列表的筛选
  18. iframe去除边框
  19. http协议中的url传参和body传参
  20. Oracle使用纪要

热门文章

  1. [Crypto]ECB模式攻击
  2. Mac Book系统时间校准
  3. session Storage
  4. 利用Python+opencv模块的dnn实现Faster R-CNN(一)
  5. gitlab 生成ssh密匙
  6. windows11 git 安装SSH密钥
  7. CART与ID3的区别C4.5离散化的过程
  8. 用webgl绘制一个彩色旋转立方体
  9. ES6----promise方法解决回调地狱问题
  10. Windows 10的最新版本是什么?