python爬蟲刷博客訪問量教程三:使用Selenium讓Chrome瀏覽器自動(dòng)化

一、前言

前面兩篇文章介紹了兩種簡單的刷流量方法,但是在實(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)行。



系列教程:

python爬蟲刷博客訪問量教程二:欺騙第三方統(tǒng)計(jì)服務(wù)

python爬蟲刷博客訪問量教程一:直接請求

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容