前言
有些網(wǎng)站為了方便和減少開發(fā)工作浴井,往往會(huì)使用第三方的統(tǒng)計(jì)服務(wù)钦讳。第三方服務(wù)作為插件的形式是無法通過直接請(qǐng)求提升訪問量苟呐。往往把訪問數(shù)據(jù)從前端發(fā)送到第三方服務(wù)后端進(jìn)行統(tǒng)計(jì)。直接請(qǐng)求只是請(qǐng)求目標(biāo)頁面的內(nèi)容坝撑,并不包括其中的引入的js和css等資源静秆。
原理分析
先拿Wordpress舉個(gè)例子,Wordpress后臺(tái)有官網(wǎng)的一個(gè)統(tǒng)計(jì)服務(wù)巡李。啟用后抚笔,可以統(tǒng)計(jì)網(wǎng)站的訪問數(shù)據(jù)。通過訪問https://pingxonline.com博客中的文章侨拦,打開Chrome開發(fā)者工具尋找向其他網(wǎng)站發(fā)送的請(qǐng)求殊橙。
在這里發(fā)現(xiàn)一個(gè)特別的資源,還附帶了一些關(guān)于博客的數(shù)據(jù)狱从。到這里就可以知道膨蛮,當(dāng)我們?cè)L問帶有追蹤代碼的頁面時(shí),頁面中的追蹤代碼被執(zhí)行季研,然后會(huì)向Wordpress服務(wù)器發(fā)送一個(gè) 1 像素的圖片請(qǐng)求敞葛。為什么是圖片?因?yàn)閳D片原生支持跨域与涡。
可以從參數(shù)中比較直觀的看出來惹谐,blog參數(shù)應(yīng)該是我的博客在Wordpress注冊(cè)的博客ID;而post參數(shù)就是帖子的意思了驼卖;rand參數(shù)是一個(gè)隨機(jī)數(shù)氨肌,每次都是不一樣的值。
那么我們是不是可以直接使用這些參數(shù)請(qǐng)求這個(gè)地址就可以使訪問量提升酌畜?
測(cè)試環(huán)境
爬蟲環(huán)境
Windows 10
python 3.6.2
python 代碼
首先需要安裝 python 的一個(gè) Requests 擴(kuò)展插件怎囚。
Requests 是用 Python 語言編寫,基于 urllib桥胞,采用 Apache2 Licensed 開源協(xié)議的 HTTP 庫恳守。它比 urllib 更加方便考婴,可以節(jié)約我們大量的工作,完全滿足 HTTP 測(cè)試需求井誉。
通過 pip 安裝
pip install requests
或者蕉扮,下載代碼后安裝:
$ git clone git://github.com/kennethreitz/requests.git
$ cd requests
$ python setup.py install
源代碼(使用代理)
下面的代碼每秒發(fā)送一次請(qǐng)求給目標(biāo)地址整胃。如果Wordpress安裝了緩存插件颗圣,則需要清除緩存才能看到最新的訪問量。
import requests
import time
import random
# 隨機(jī)獲取瀏覽器標(biāo)識(shí)
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參數(shù)必須為1在岂,每次只請(qǐng)求一個(gè)IP地址
? ? url = 'http://tvp.daxiangdaili.com/ip/?tid=你的訂單號(hào)&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__':
? ? #? 目標(biāo)url地址
? ? url = 'https://pixel.wp.com/g.gif'
? ? # 參數(shù)
? ? 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:
? ? ? ? ? ? # 開啟一個(gè)會(huì)話
? ? ? ? ? ? s = requests.session()
? ? ? ? ? ? # 調(diào)用函數(shù)獲取瀏覽器標(biāo)識(shí)
? ? ? ? ? ? headers = get_UA()
? ? ? ? ? ? # 調(diào)用函數(shù)獲取IP代理地址
? ? ? ? ? ? proxy = get_ip()
? ? ? ? ? ? # 開始請(qǐng)求, 注意本地測(cè)試使用的是本地地址,使用代理是無效的
? ? ? ? ? ? web_data = s.get(url, headers=headers, proxies=proxy, params=playload)
? ? ? ? ? ? # 輸出網(wǎng)頁內(nèi)容
? ? ? ? ? ? print(web_data.content)
? ? ? ? ? ? # 間隔1秒
? ? ? ? ? ? time.sleep(1)
? ? ? ? finally:
? ? ? ? ? ? print('error')
系列教程: