python模拟seo_百度统计原理分析-利用Python实现模拟访问
国内大多数站长可能都在用百度统计。统计的使用方法也很简单,只要在需要统计的页面底部加上统计代码即可。然后打开百度统计的后台,就能看到访客信息,包括入口页面,停留时间,跳出率等等,很是方便。
使用当然是会用,但是随着不断成长,逐渐开始考虑一些事情,比如百度统计只是一行JS怎么就实现统计了呢?如果不打开网页,是不是能利用脚本模拟这一过程呢?
与是就开始上网查资料,开始了新一轮的折腾。网上的研究百度统计的不多,我找到了李鑫博客的原理分析和模拟访问
原理分析
统计代码
首先,百度统计要求网站必须嵌入一段JS代码,大概是长这个样子的。
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?65e1c6689693082cffb3b7e1f2d8027f";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
去除掉多余的代码,得到最重要的一行
https://hm.baidu.com/hm.js?65e1c6689693082cffb3b7e1f2d8027f
即引入这个JS文件就能实现统计了,问题后边的32位字符串就是每个站点特有的统计ID
hm.js做了些什么
该代码加载时,会往用户浏览器中写入名为“HMACCOUNT”的永久cookie,有效期至2038年,以此来区分用户身份。
同时会获取客户端环境,包括浏览器版本,屏幕分辨率,色深,语言等信息。
总结如下:
cc: 不知道,一般为1
cf:url参数hmsr的值
ci:url参数hmci的值
ck:是否支持cookie 1:0
cl:颜色深度 如 “32-bit”
cm:url参数hmmd的值
cp:url参数hmpl的值
cw:url参数hmkw的值
ds:屏幕尺寸,如 ‘1024×768’
ep:初始值为’0’,时间变量,反映页面停留时间,格式大概是:现在时间-载入时间+“,”+另一个很小的时间值
et:初始值为’0’,如果ep时间变量不是0的话,它会变成其他
fl:flash版本
ja:java支持 1:0
ln:语言 zh-cn
lo: 不知道,一般为0
lt:日期 time.time(),如“1327847756”, 在首次请求没有
nv: 不知道,一般为1或者0
rnd:十位随机数字
sb:如果是360se浏览器该值等于‘17’
se: 和搜索引擎相关
si:统计代码id
st:
su:上一页document.referrer
sw: 不知道,估计和搜索引擎有关,一般为空
sse:不知道,估计和搜索引擎有关,一般为空
v:统计代码的版本 ,目前该值为“1.2.30”
发送请求
当获取到所有信息的时候,就可以向服务器提交请求了,将之前获取到的参数进行整合,并以这些参数为后缀请求hm.gif,大概是这样一个地址
https://hm.baidu.com/hm.gif?cc=0&ck=1&cl=24-bit&ds=1440x900&vl=372&ep=7626%2C3009&et=3&fl=29.0&ja=0&ln=zh-cn&lo=0<=1524041576&rnd=1839110354&si=65e1c6689693082cffb3b7e1f2d8027f&su=https%3A%2F%2Fyantuz.cn%2F275.html&v=1.2.30&lv=3&sn=28783&u=https%3A%2F%2Fyantuz.cn%2F
模拟访问
既然了解了请求原理,那能不能用脚本实现模拟访问呢?答案当然是可以的
百度统计的4个请求
通过控制台我们可以发现,每访问一个页面都会产生4个请求
加载hm.js
加载完毕时候出发两次请求,并传递参数
退出页面时候,发出一次请求,并传递参数
实际模拟时,只需要前三次请求即可在访问记录中看到访客记录。
python模拟访问
import urllib2
import urllib
import random
import math
import urlparse
import time
import cookielib
########################################################################
class Baidu:
""""""
Referer='http://www.lixin.me'
TargetPage='/www.lixin.me'
BaiduID=''
Hjs="http://hm.baidu.com/h.js?"
Hgif="http://hm.baidu.com/hm.gif?"
UserAgent='Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)' #IE9
MyData={'cc':'1','ck':'1','cl':'32-bit','ds':'1024x768','et':'0','ep':'0','fl':'11.0','ja':'1','ln':'zh-cn','lo':'0','nv':'1','st':'3','v':'1.0.17'}
#----------------------------------------------------------------------
def __init__(self,baiduID,targetPage=None,refererPage=None):
"""Constructor"""
self.TargetPage=targetPage or self.TargetPage
self.Referer=refererPage or self.Referer
self.BaiduID=baiduID
self.MyData['si']=self.BaiduID
self.MyData['su']=urllib.quote(self.Referer)
pass
def run(self,timeout=5):
cj=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders=[("Referer",self.TargetPage),("User-Agent",self.UserAgent)]
try:
response=opener.open(self.Hjs+self.BaiduID).info()
self.MyData['rnd']=int(random.random()*2147483647 )
self.MyData['lt']=int(time.time())
fullurl=self.Hgif+urllib.urlencode(self.MyData)
response2=opener.open(fullurl,timeout=timeout).info()
self.MyData['rnd']=int(random.random()*2147483647 )
self.MyData['et']='3'
self.MyData['ep']='2000,100'
response3=opener.open(self.Hgif+urllib.urlencode(self.MyData),timeout=timeout).info()
pass
except urllib2.HTTPError ,ex:
print ex.code
pass
except urllib2.URLError,ex:
print ex.reason
pass
pass
if __name__ =="__main__":
a=Baidu('百度统计id','https://yantuz.cn','yantuz.cn')
a.run()
文章来源:https://zhuanlan.zhihu.com/p/35844509
python模拟seo_百度统计原理分析-利用Python实现模拟访问相关推荐
- python爬去百度文库_利用Python语言轻松爬取数据[精品文档]
利用 Python 语言轻松爬取数据 对于小白来说,爬虫可能是一件非常复杂. 技术门槛很高的事情. 比如有人认为学爬虫必须精通 Python ,然后哼哧哼哧系统学习 Python 的每个知识点,很久之 ...
- python爬取百度文库_利用Python语言轻松爬取数据
利用 Python 语言轻松爬取数据 对于小白来说,爬虫可能是一件非常复杂. 技术门槛很高的事情. 比如有人认为学爬虫必须精通 Python ,然后哼哧哼哧系统学习 Python 的每个知识点,很久之 ...
- python模拟访问js_百度统计原理分析-利用PHP/Python实现模拟访问
国内大多数站长可能都在用百度统计.统计的使用方法也很简单,只要在需要统计的页面底部加上统计代码即可.然后打开百度统计的后台,就能看到访客信息,包括入口页面,停留时间,跳出率等等,很是方便. 使用当然是 ...
- python爬百度翻译-Python爬取百度翻译(利用json提取数据)
本篇文章给大家带来的内容是关于Python爬取百度翻译(利用json提取数据),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 工具:Python 3.6.5.PyCharm开发工具. ...
- 利用python从网页查找数据_利用Python模拟淘宝的搜索过程并对数据进行可视化分析...
数据挖掘入门与实战 公众号: datadw 本文讲述如何利用Python模拟淘宝的搜索过程并对搜索结果进行初步的数据可视化分析. 搜索过程的模拟:淘宝的搜索页面有两种形式, 一种形式是, 2019/2 ...
- python 数据分析 百度网盘_[百度网盘]利用Python进行数据分析(Python For Data Analysis中文版).pdf - Jan-My31的博客 - 磁力点点...
利用Python进行数据分析(Python For Data Analysis中文版).pdf - Jan-My31的博客 2018-5-27 · 链接:https://pan.baidu.com/s ...
- python单词软件哪个好_利用Python分析背单词软件的惊人真相
摘要:利用python分析背单词软件,揭秘你不知道的惊人真相 0×00 前言 你想知道背单词软件有大概多少人注册第一天都没有背完嘛 你想知道背单词软件这么火,这么多人在使用,真的有多少人真的在背诵嘛 ...
- python实现模拟按键下拉_利用 Python 实现 Windows 下的鼠标键盘模拟
本来用按键精灵是可以实现我的需求,而且更简单,但既然学python ,就看一下呗. 依赖: pip install PyUserInput PyUserInput 依赖 pyhook,所以还得安装 p ...
- python爬取qq好友_利用Python爬取QQ好友空间数据
程序思路 构造请求链接 先获取所有的好友 获取说说 获取留言 获取个人信息 把数据存到数据库 以上就是整个过程中的大思路,然后在逐步把大思路化解成小的具体的问题去解决.本人对于Python学习创建了一 ...
最新文章
- optee系统服务/service的实现方式
- 济南电子机械工程学校计算机专业班主任,济南电子机械工程学校庆祝2020年教师节暨表彰大会隆重举行...
- OpenCV imgproc分割(segmentation)的实例(附完整代码)
- Linux 下打包报错:enospc (no space left on device)
- 老男孩linux运维50期
- c++ 时间序列工具包_我的时间序列工具包
- 定义python函数时如果没有return_定义 Python 函数时,如果函数中没有 return 语句,则默认返回空值 None 。_学小易找答案...
- java 开发手机web,手机web app开发笔记
- 网易发“暴力裁员”内部说明;京东负责不幸员工的孩子费用到22岁;Linux kernel 5.4发布 | 极客头条...
- layui分页完整实例php,使用 layui 后端分页的实例
- c语言入门经典必备代码
- 三星g9500Android9.0,三星G9550/9500刷机包 V9.0 国行港行通刷 极光设置功能微调 完美ROOT权限 稳定流畅省电...
- 计算机教程求和,excel筛选求和的方法步骤图
- [Swift]修改NSLayoutConstraint的multiplier
- 百度图片时看到一张很眼熟,竟然是自己发的,这收录效率!
- 一些实用的功能强大的绘图软件
- 关于网络传输中速度达不到很高的原因
- winform实现拖曳功能
- 人工智能本来是个很简单的事,咋被人们整的这么神秘?
- JS二进制和十六进制转换
热门文章
- python 为女神编朵玫瑰花的代码,python绘制玫瑰的代码
- Python 处理表格进行成绩排序的操作代码
- C++新手,用OOP思想编写的推箱子小游戏,请多赐教
- Three.js盖房子 点击开关门
- STM32H7 USART 时钟初始化
- tensorflow——模型的保存和恢复tf.trian.saver()
- 搭建一个网站大概需要多少钱
- Word第n页显示第一页的页码
- AD603+MCP4725+STM32-----自动增益控制电路
- 逆向看C++ new申请堆对象的构造,析构函数调用