前言
有些网站为了方便和减少开发工作,往往会使用第三方的统计服务。第三方服务作为插件的形式是无法通过直接请求提升访问量。往往把访问数据从前端发送到第三方服务后端进行统计。直接请求只是请求目标页面的内容,并不包括其中的引入的js和css等资源。
原理分析
先拿Wordpress举个例子,Wordpress后台有官网的一个统计服务。启用后,可以统计网站的访问数据。通过访问https://pingxonline.com博客中的文章,打开Chrome开发者工具寻找向其他网站发送的请求。
在这里发现一个特别的资源,还附带了一些关于博客的数据。到这里就可以知道,当我们访问带有追踪代码的页面时,页面中的追踪代码被执行,然后会向Wordpress服务器发送一个 1 像素的图片请求。为什么是图片?因为图片原生支持跨域。
可以从参数中比较直观的看出来,blog参数应该是我的博客在Wordpress注册的博客ID;而post参数就是帖子的意思了;rand参数是一个随机数,每次都是不一样的值。
那么我们是不是可以直接使用这些参数请求这个地址就可以使访问量提升?
测试环境
爬虫环境
Windows 10
python 3.6.2
python 代码
首先需要安装 python 的一个 Requests 扩展插件。
Requests 是用 Python 语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。
通过 pip 安装
pip install requests
或者,下载代码后安装:
$ git clone git://github.com/kennethreitz/requests.git
$ cd requests
$ python setup.py install
源代码(使用代理)
下面的代码每秒发送一次请求给目标地址。如果Wordpress安装了缓存插件,则需要清除缓存才能看到最新的访问量。
import requests
import time
import random
# 随机获取浏览器标识
def get_UA():
UA_list = [
"Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19",
"Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30",
"Mozilla/5.0 (Linux; U; Android 2.2; en-gb; GT-P1000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0",
"Mozilla/5.0 (Android; Mobile; rv:14.0) Gecko/14.0 Firefox/14.0",
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36"
]
randnum = random.randint(0, len(UA_list)-1)
h_list = {
'user-agent': UA_list[randnum]
}
return h_list
# 获取代理IP
def get_ip():
# 这里填写大象代理api地址,num参数必须为1,每次只请求一个IP地址
url = 'http://tvp.daxiangdaili.com/ip/?tid=你的订单号&num=1&delay=5&category=2'
response = requests.get(url)
response.close()
proxy = {
"http":"http://"+response.text
}
print(proxy['http'])
return proxy
if __name__ == '__main__':
# 目标url地址
url = 'https://pixel.wp.com/g.gif'
# 参数
playload = {
'v': 'ext',
'j': '1:5.8',
'blog': '124283775',
'post': '158',
'tz': '8',
'srv': 'pingxonline.com',
'host': 'pingxonline.com',
'ref': 'https://pingxonline.com/',
'rand': random.random()
}
while 1:
try:
# 开启一个会话
s = requests.session()
# 调用函数获取浏览器标识
headers = get_UA()
# 调用函数获取IP代理地址
proxy = get_ip()
# 开始请求, 注意本地测试使用的是本地地址,使用代理是无效的
web_data = s.get(url, headers=headers, proxies=proxy, params=playload)
# 输出网页内容
print(web_data.content)
# 间隔1秒
time.sleep(1)
finally:
print('error')
系列教程: