一、前言
前面兩篇文章介紹了兩種簡單的刷流量方法,但是在實(shí)際應(yīng)用上總會碰到許許多多的問題。比如,《python爬蟲刷博客訪問量教程二:欺騙第三方統(tǒng)計(jì)服務(wù)》的方法不是很完美,很多大型網(wǎng)站請求數(shù)非常多,請求的數(shù)據(jù)也許會加密混淆,這樣的話,逐一分析會浪費(fèi)很多時(shí)間。而且前面兩種方法還不是模擬真正的瀏覽器,這時(shí),就有了瀏覽器自動(dòng)化的需求。使用代碼控制瀏覽器訪問某個(gè)鏈接,甚至可以設(shè)置不同的代理。這樣不僅能夠使網(wǎng)站的資源請求完整,還能節(jié)省很多工作量。這樣做的缺點(diǎn)就是,速度慢,不能后臺運(yùn)行。而且網(wǎng)站打開速度取決于代理的速度。
二、安裝必要插件
測試環(huán)境:Windows 10 + python 3.6.2
1. 安裝Selenium
pip install selenium
2. 安裝Requests
pip install requests
3. 安裝配置Chrome WebDriver
每個(gè)版本支持的chrome版本是不一樣的,必須要用支持的版本才能驅(qū)動(dòng)瀏覽器。
官方網(wǎng)站被墻,用這個(gè)鏡像可以下載全版本的:http://npm.taobao.org/mirrors/chromedriver
下面給出的是目前最新的2.3.7版本,支持的chrome版本是v64-66。其他版本可以自行去下載。
Windows版本:chromedriver_win32
Windows 安裝方法:
下載壓縮包,解壓到任意文件夾,將該文件夾添加到系統(tǒng)PATH環(huán)境變量中。
Linux 安裝方法:
把解壓的文件放到?/usr/bin 目錄下,并且修改好權(quán)限。
三、代碼測試
目標(biāo):使用代碼控制瀏覽器訪問指定的鏈接。并且每次訪問使用不同的代理。
代理:同樣使用的是大象代理的api接口提取代理IP
import random
import requests
import time
from selenium import webdriver
import sys
import os
# 隨機(jī)獲取瀏覽器標(biāo)識
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 = UA_list[randnum]
? ? return h_list
# 獲取代理IP
def get_ip():
? ? # 這里填寫大象代理api地址,num參數(shù)必須為1,每次只請求一個(gè)IP地址
? ? url = 'http://tvp.daxiangdaili.com/ip/?tid=你的訂單號&num=1&delay=5&category=2'
? ? response = requests.get(url)
? ? response.close()
? ? ip = response.text
? ? print(ip)
? ? return ip
if __name__ == '__main__':
? ? url = "https://pingxonline.com/"
? ? # 無限循環(huán),每次都要打開一個(gè)瀏覽器窗口,不是標(biāo)簽
? ? while 1:
? ? ? ? # 調(diào)用函數(shù)獲取瀏覽器標(biāo)識, 字符串
? ? ? ? headers = get_UA()
? ? ? ? # 調(diào)用函數(shù)獲取IP代理地址,這里獲取是字符串,而不是像前兩個(gè)教程獲得的是數(shù)組
? ? ? ? proxy = get_ip()
? ? ? ? # 使用chrome自定義
? ? ? ? chrome_options = webdriver.ChromeOptions()
? ? ? ? # 設(shè)置代理
? ? ? ? chrome_options.add_argument('--proxy-server=http://'+proxy)
? ? ? ? # 設(shè)置UA
? ? ? ? chrome_options.add_argument('--user-agent="'+headers+'"')
? ? ? ? # 使用設(shè)置初始化webdriver
? ? ? ? driver = webdriver.Chrome(chrome_options=chrome_options)
? ? ? ? try:
? ? ? ? ? ? # 訪問超時(shí)30秒
? ? ? ? ? ? driver.set_page_load_timeout(30)
? ? ? ? ? ? # 訪問網(wǎng)頁
? ? ? ? ? ? driver.get(url)
? ? ? ? ? ? # 退出當(dāng)前瀏覽器
? ? ? ? ? ? driver.close()
? ? ? ? ? ? # 延遲1~3秒繼續(xù)
? ? ? ? ? ? time_delay = random.randint(1, 3)
? ? ? ? ? ? while time_delay > 0:
? ? ? ? ? ? ? ? print(str(time_delay) + " seconds left!!")
? ? ? ? ? ? ? ? time.sleep(1)
? ? ? ? ? ? ? ? time_delay = time_delay - 1
? ? ? ? ? ? ? ? pass
? ? ? ? except:
? ? ? ? ? ? print("timeout")
? ? ? ? ? ? # 退出瀏覽器
? ? ? ? ? ? driver.quit()
? ? ? ? ? ? time.sleep(1)
? ? ? ? ? ? # 重啟腳本, 之所以選擇重啟腳本是因?yàn)?,長時(shí)間運(yùn)行該腳本會出現(xiàn)一些莫名其妙的問題,不如重啟解決
? ? ? ? ? ? python = sys.executable
? ? ? ? ? ? os.execl(python, python, *sys.argv)
? ? ? ? finally:
? ? ? ? ? ? pass
效果圖:

這段代碼穩(wěn)定性還不錯(cuò),超時(shí)等錯(cuò)誤就會重啟腳本繼續(xù)獲取新的代理IP。保證腳本能夠長時(shí)間運(yùn)行。
系列教程: