【复】从0到1的 selenium 爬虫经历
文章目錄
- 前言
- 簡介與安裝
- 定義
- 安裝 selenium 庫
- 安裝瀏覽器驅(qū)動程序
- 測試
- Selenium IDE
- 實戰(zhàn)演練
- 例一:下載圖片
- 例二:注冊登錄
- 代理
- 透明代理
- 匿名代理
- 高級匿名代理
- 后記
前言
備戰(zhàn)春招難免會無趣和煎熬,因此,突然發(fā)現(xiàn)了爬蟲這么樂趣的事情,一番探究之后,發(fā)現(xiàn)這是多么美妙的事情啊~
自動化腳本 yyds~
言歸正傳,
之前使用過爬蟲,不過用的是 Java 的,當(dāng)時做一個電商項目,用 Jsoup 快速的爬取某東的商品數(shù)據(jù)存到 es 中,后來迎接雙11,某東在中間加了個驗證重定向,這就導(dǎo)致 Jsoup 基本失效,因而認(rèn)識了 HtmlUnit,實現(xiàn)了模擬操作瀏覽器,成功地獲取到了數(shù)據(jù);
之后就是用 Jsoup 和 HtmlUnit 結(jié)合寫了幾個自動化腳本,香香的~,就是掛服務(wù)器上,要占用的運行內(nèi)存不小;
所以轉(zhuǎn)到了 py 的 request,啊,這是真的香,不僅運行方便,內(nèi)存占用也就五分之一左右,用了 request 怎么能不用 selenium 呢,下面為您揭曉 selenium 的妙用;
?
簡介與安裝
定義
Selenium 是一個用于 Web 應(yīng)用程序測試的工具。Selenium 測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括 IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge 等。
這個工具的主要功能包括:
- 測試與瀏覽器的兼容性——測試應(yīng)用程序看是否能夠很好得工作在不同瀏覽器和操作系統(tǒng)之上。
- 測試系統(tǒng)功能——創(chuàng)建回歸測試檢驗軟件功能和用戶需求。
- 支持自動錄制動作和自動生成 .Net、Java、Perl 等不同語言的測試腳本。
Selenium 測試直接在瀏覽器中運行,就像真實用戶所做的一樣。Selenium測試可以在 Windows、Linux 和 Macintosh 上的 Internet Explorer、Chrome 和 Firefox 中運行。
?
安裝 selenium 庫
首先我們要清楚,為什么要使用 selenium?
為了防止網(wǎng)絡(luò)爬蟲,加大網(wǎng)絡(luò)爬蟲的難度,很多網(wǎng)站將接口地址做了處理,它們更多的具有這些特點:既冗長又復(fù)雜,經(jīng)過加密,具有時效性,毫無規(guī)律可言。
selenium 可以使用模擬瀏覽器運行的方式,它可以做到在瀏覽器中看到的是什么樣,抓取的源碼就是什么樣,即可見即可爬。再也不用管網(wǎng)頁內(nèi)容是使用了JavaScrapt還是Ajax, 也不用管接口有多復(fù)雜了(其實連接口是什么都不用管)。
這里用的編程語言是 Python,因此,只要安裝 py 中的 selenium 庫就好了,
pip install selenium?
安裝瀏覽器驅(qū)動程序
運行 selenium 打開瀏覽器是需要下載安裝瀏覽器驅(qū)動程序的,火狐中有集成好的插件,直接搜索安裝即可,下面是以 Google Chrome 為例;
官方下載地址:https://chromedriver.storage.googleapis.com/index.html
淘寶鏡像地址:http://npm.taobao.org/mirrors/chromedriver/
我的 Google Chrome 的版本號是 96.0.4664.110,但是這里并沒有相對應(yīng)的版本號,我把略高和略低版本的驅(qū)動程序都嘗試了一下,發(fā)現(xiàn)略低的是可以的,即下載 96.0.4664.45;
?
下載完之后,放在本地的 py 根目錄下,
?
測試
運行下述代碼,測試一下之前的安裝是否成功,
from selenium import webdriver driver = webdriver.Chrome() driver.get("https://blog.csdn.net/weixin_46263782")
?
Selenium IDE
Selenium IDE 是一個火狐插件(現(xiàn)在谷歌也有),可以幫助剛?cè)腴T的自動化測試供測試,在腳本語言不太熟練的情況下,可以通過Selenium IDE實現(xiàn)腳本的錄制、開發(fā)、回放。
這個東西對萌新真的太友好了,只要自己操作錄制一遍,基本能百分百還原,而且還能夠?qū)С龀删幊陶Z言,稍作修改就能使用,真的是很方便,強推!
這里以谷歌為例,點進設(shè)置,選擇擴展程序,搜索一下 Selenium IDE,我這已經(jīng)是安裝好了,
使用的時候點擊右上角,
會彈出如下界面:
第一次的話就選擇新建一個項目,然后跟著步驟走就好了;
這是我自己之前寫的一個自動化腳本,先是通過錄制,然后自己根據(jù)實際情況稍作修改,至于干什么的,懂得都懂;
只能說這東西真的太香了;
?
實戰(zhàn)演練
既然學(xué)了理論,自然要進行實踐來鞏固和加深印象了,畢竟實踐是檢驗真理性的唯一標(biāo)準(zhǔn)嘛,
?
例一:下載圖片
最近喜歡關(guān)注國家大事,然后就發(fā)現(xiàn)這 60秒讀懂世界 就很不錯,先是看了看公眾號,不過沒有搞到鏈接,在網(wǎng)上搜了一下,發(fā)現(xiàn)有一家應(yīng)該是爬了那個公眾號,然后我就借機爬了那個網(wǎng)站,嘿嘿,在通過 bot 每天定時發(fā)給自己,美滋滋😃
不過我是用 requests 完成的,先上源碼,然后再上轉(zhuǎn)換成 selenium 之后的代碼;
import requests import urllib.request from pyquery import PyQuery as pqurl = 'https://www.rjdq8.com/?c=index&m=infos&last_cate_id=7' doc = pq(requests.get(url, headers = headers).text) next_url = str(doc('.news-top-detail').find('a').attr('href')) next_doc = pq(requests.get(next_url, headers = headers).text) png_url = 'https://www.rjdq8.com/' + str(next_doc('.all-detail-item-content').find('img').attr('src')) request = urllib.request.Request(png_url, headers = headers) response = urllib.request.urlopen(request) fp = open("day_60s.png", "wb") fp.write(response.read()) fp.close()大致示意一下就是下面這樣:
import time from selenium import webdriver from selenium.webdriver.common.by import Byurl = 'https://www.rjdq8.com/?c=index&m=infos&last_cate_id=7' driver = webdriver.Chrome() driver.get(url) next_url = driver.find_element(By.CLASS_NAME, 'news-top-detail').find_element(By.TAG_NAME, 'a').get_attribute('href') time.sleep(2) driver.get(next_url) png_url = driver.find_element(By.CLASS_NAME, 'all-detail-item-content').find_element(By.TAG_NAME, 'img').get_attribute('src') driver.quit()?
例二:注冊登錄
一般用到 selenium 的都會有登錄注冊這種要填充文本框的環(huán)節(jié),最優(yōu)的選擇當(dāng)然是直接塞 cookie,那真要注冊登錄了該怎么辦呢;
一般注冊登錄的文本框就是 input,然后還有一個按鈕,基本都是這樣,那代碼就如下:
driver.get(url) time.sleep(1)# 登錄 driver.find_element(By.NAME, 'UserText').send_keys(userId) time.sleep(0.2) driver.find_element(By.NAME, 'PasswordText').send_keys(password) time.sleep(0.2) driver.find_element(By.CLASS_NAME, 'btn-login').click() time.sleep(1)?
代理
想必用到 selenium 的讀者都應(yīng)該多少聽過或者用過代理了,那這里為什么要特意提及代理呢,因為有些讀者可能只知道要用代理,但卻不明白代理也是分等級的,下面來一一介紹:
代理主要分為三種:透明代理,匿名代理,高級匿名代理;
?
透明代理
什么是透明代理?
透明代理是另一種類型的 HTTP 代理,它們不會修改通過它們發(fā)送的請求。您的 IP 地址和其他可能鏈接到您和您設(shè)備的信息將發(fā)送到該網(wǎng)站。
它們允許請求通過它們,或者在某些條件不滿足時拒絕訪問。由于它們不會修改您的請求并且不會通知您它們的存在,因此您無法分辨它們是否存在,除非您進行了測試。
但是,然而,它們既可能對你有益,也可能成為你擔(dān)憂的來源,并最終決定你的上網(wǎng)體驗。
?
透明代理是如何工作的?
透明代理與任何其他類型的代理一樣:它們是中介,發(fā)送到 Web 服務(wù)器的請求在到達(dá)預(yù)期的 Web 服務(wù)器之前會通過它們。將它們策略性地放置在中間,并通過它們路由請求。與需要配置匿名代理才能工作的匿名代理不同,透明代理從頭開始就不需要進行配置,這就是為什么大多數(shù)人不了解它們的原因。
REMOTE_ADDR = 代理 IP 地址 HTTP_VIA = 代理 IP 地址 HTTP_X_FORWARDED_FOR = 您的 IP 地址因此,當(dāng)您使用透明代理時,網(wǎng)站所有者知道您使用的是 HTTP_VIA 代理,同時也知道您的真實 IP!
通過透明代理發(fā)送請求時,請求將會被攔截,并修改 REMOTE_ADDR 標(biāo)頭,并用代理服務(wù)器的 IP 地址填充,告知網(wǎng)站該請求已通過。HTTP_X_FORWARDED_FOR 標(biāo)頭將攜帶您的 IP 地址,并且啟用了 HTTP_VIA,使網(wǎng)站知道請求來自您,并通過代理服務(wù)器傳遞。
它們通常由 Internet 服務(wù)提供商和您使用其 WiFi 的組織進行配置。代理可以訪問您的請求數(shù)據(jù),并且可以出于惡意目的對其進行修改。它成為一種稱為 “中間人攻擊” 的網(wǎng)絡(luò)攻擊。然而,在大多數(shù)情況下,沒有惡意活動被執(zhí)行,您將被審查和內(nèi)容過濾,其中一些甚至是有用的。
?
透明代理用例
- 審查與過濾:
透明代理的最普遍應(yīng)用是在審查領(lǐng)域。互聯(lián)網(wǎng)上的審查制度是真實的,您可能一直處于監(jiān)控之下,甚至不知道。當(dāng)發(fā)現(xiàn)違反規(guī)則時,您才知道自己正在受到監(jiān)視。
?
政府和企業(yè),甚至學(xué)校,都使用透明代理來限制對 Internet 上某些網(wǎng)站的訪問。你若沒有訪問受限制的網(wǎng)站,你不會知道。但是,如果您嘗試訪問任何受限制的網(wǎng)站,則會顯示一條錯誤消息。
? - 認(rèn)證網(wǎng)關(guān):
您是否遇到過使用公共 Wi-Fi 時,將您重定向到要求您提供身份驗證詳細(xì)信息的頁面,然后才能繼續(xù)?那是一個透明代理,它可以攔截您的請求,并確保您有權(quán)使用該代理,然后您的請求才能通過。
? - 網(wǎng)絡(luò)緩存:
代理在 Web 緩存領(lǐng)域很有用。您的 Internet 服務(wù)提供商(ISP)或辦公室可以使用代理來減少帶寬使用,并減少等待 Web 請求響應(yīng)所花費的時間。
?
首次發(fā)出請求時,代理將獲取數(shù)據(jù)并保存本地副本。當(dāng)您或同一網(wǎng)絡(luò)中的任何其他人嘗試訪問相同的資源時,它沒有獲取新的請求到網(wǎng)站,而是僅獲取保存的副本。一種微觀上的內(nèi)容交付網(wǎng)絡(luò)(CDN)。
?
匿名代理
什么是匿名代理?
匿名代理是 Internet 用戶中最流行的代理類型。它們是不透明的,可以通過更改您的 IP 地址來更改請求數(shù)據(jù)。這使得您訪問的網(wǎng)站很難知道您是發(fā)起請求的網(wǎng)站。
將 IP 地址更改為一個全新的 IP 地址,這就是使它匿名的原因。但是,他們將自己標(biāo)識為代理。這是通過修改 REMOTE_ADDR,HTTP_X_FORWARDED_FOR 和 HTTP_VIA 來完成的。
REMOTE_ADDR = 代理 IP 地址 HTTP_VIA = 代理 IP 地址 HTTP_X_FORWARDED_FOR = 代理 IP 地址因此,當(dāng)您使用匿名代理時,網(wǎng)站所有者知道您使用的是 HTTP_VIA 代理,但無法知道您的真實 IP。
?
匿名代理如何工作的?
如果不配置代理,發(fā)送的 Web 請求將直接發(fā)送到預(yù)期的 Web 服務(wù)器。匿名代理要求您對其進行配置,然后才能使用它們,盡管您的辦公室可以決定根據(jù)您的行為對其進行配置。
如果您打算在非瀏覽器環(huán)境(例如 SEO 工具或某種類型的 bot)中使用它們,則必須學(xué)習(xí)如何在此類工具上進行配置。
配置后,您的 Web 請求所遵循的路由將發(fā)生變化。代理服務(wù)器將位于您的計算機瀏覽器和 Internet 之間。當(dāng)您發(fā)出 Web 請求時,您將被重定向到代理服務(wù)器,而不是直接進入要訪問的站點的請求。到達(dá)代理服務(wù)器后,您的請求標(biāo)頭將被修改,正是這種修改使它成為匿名的。
HTTP 代理修改 HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR 標(biāo)頭,剝離您的 IP 地址,并用其自己的 IP 地址填充它。此后,請求將發(fā)送到網(wǎng)站,因為發(fā)送了 HTTP_VIA 標(biāo)頭,所以網(wǎng)站將知道已使用代理,但不會看到您的 IP 地址。發(fā)送響應(yīng)后,它不會直接發(fā)送給您,而是發(fā)送給代理服務(wù)器,然后代理服務(wù)器將請求轉(zhuǎn)發(fā)回給您。
但是,您需要知道,盡管您對使用代理訪問的網(wǎng)站是匿名的,但對于您使用的代理卻永遠(yuǎn)都不是匿名的。雖然許多網(wǎng)站聲稱不會跟蹤用戶的瀏覽活動,并嚴(yán)格執(zhí)行無日志策略,但有些網(wǎng)站會在必要時給你發(fā)郵件,對,有些網(wǎng)站實際上會保留日志,即使他們告訴您不會這樣做。這就是為什么您應(yīng)該使用高級代理服務(wù)器,這些代理服務(wù)器位于不強迫其業(yè)務(wù)披露其客戶信息的區(qū)域。
?
匿名代理用例
匿名代理具有廣泛的應(yīng)用。如果您是一個經(jīng)常使用 Internet 的用戶,您可能真的不需要它們,但是如果您想保持匿名,或者您正在進行 web 自動化,沒有代理,那么您就幾乎無能為力了。
以下是匿名代理的主要用途:
-
逃避審查并訪問本地和受限制的 Web 資源:
在瀏覽器上忘記隱身模式;如果您訪問的網(wǎng)站可以訪問您的 IP 地址,那您就是不匿名的。通過您的 IP 地址,他們可以檢測到您的位置(雖然不是絕對的)。安全機構(gòu)可以使用您的 IP 地址以及其他信息來跟蹤您。
?
有了您的 IP 地址,您的政府或辦公室就可以在線監(jiān)控您的活動。網(wǎng)站可以使用您的 IP 地址來拒絕您訪問其他地方的本地內(nèi)容。因為代理可以隱藏您的 IP 地址,它可以幫助您規(guī)避所有這些。 -
網(wǎng)頁爬取和抓取:
大多數(shù)網(wǎng)站都有操作限制。舉例來說,如果您持續(xù)在一分鐘內(nèi)向 Google 搜索發(fā)送許多請求,那么您將需要解決驗證碼,這是您已經(jīng)超過了人為限制的跡象,他們懷疑您正在使用機器人。
?
為了避免在使用機器人抓取和爬網(wǎng)時解決驗證碼問題,互聯(lián)網(wǎng)營銷人員使用了匿名代理,匿名代理可以是高旋轉(zhuǎn)代理,例如 SEO,也可以是粘性代理(需要維護會話時),例如社交媒體自動化。 -
品牌保護:
不知名的人或公司在網(wǎng)上做什么,不會引起別人的注意。如果您以知名公司的身份進行嘗試,它可能會引起很多關(guān)注,這可能會損害您的品牌形象。但是,有些活動雖不符合道德規(guī)范,但您的品牌需要它們保持活力。
?
在這種情況下您會怎么做?眼睜睜看著你的品牌衰落,因為你不想損害它的形象?不,您應(yīng)該使用代理和其他技術(shù),以確保自己的某些在線活動不會被發(fā)現(xiàn)。 -
廣告驗證:
在線廣告行業(yè)是一種除非您知道自己在做什么,否則就無法避免被騙的網(wǎng)站。這與您是廣告發(fā)布商還是合作伙伴無關(guān)。一些營銷人員可以從他們不展示的廣告中獲得收入。
?
他們利用了一些技巧,這些技巧會在您訪問時向您展示廣告,但向他們的客戶展示需求,您可以使用代理人來偽裝成普通用戶。另一方面,您可以使用代理來驗證您不存在的位置的廣告。
?
例如,Google AdSense 根據(jù)位置,瀏覽歷史記錄和其他數(shù)據(jù)顯示不同的廣告。使用代理,您可以更改位置并訪問其他位置的數(shù)據(jù)。
?
除此以外,它們還用于倒賣運動鞋和倒票 …
?
高級匿名代理
什么是高級匿名代理?
高匿名代理是一種 HTTP 代理,它是匿名的,可以將安全性和隱私性提高到一個全新的水平。與在匿名代理中將您的 IP 地址隱藏但將自己標(biāo)識為代理的情況不同,高級匿名代理不會將自己標(biāo)識為代理,而是將您的 IP 地址隱藏并提供給客戶端。
當(dāng)您僅可以使用匿名代理時,您可能會問為什么要使用高級匿名代理。事實是,許多網(wǎng)站默認(rèn)情況下會阻止匿名代理。通過使用高匿名代理,您可以逃避代理檢查。當(dāng)您獲得訪問請求資源的權(quán)限時,其中的關(guān)鍵是 HTTP 標(biāo)頭。
?
高級匿名代理如何工作的?
高級匿名代理的工作原理與所有匿名代理相同,它們充當(dāng)您的 Web 請求通過其發(fā)送的中介服務(wù)器。當(dāng)請求到達(dá)它時,您的請求將被修改,剝離您的 IP 地址并用一個完全不同的 IP 地址替換它,這樣您請求內(nèi)容的 Web 服務(wù)器將不會知道您在請求的背后。
但是,與將自己標(biāo)識為代理的匿名代理不同,高匿名代理不會將自己標(biāo)識為代理,代理如何識別和不識別 Web 服務(wù)器的自身?有3個 HTTP 標(biāo)頭供代理服務(wù)器使用,以便網(wǎng)站知道發(fā)送給它們的請求是否通過代理服務(wù)器路由。這3個標(biāo)頭包括 HTTP_VIA,HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR。
REMOTE_ADDR = 代理 IP 地址 HTTP_VIA = 未確定(空白) HTTP_X_FORWARDED_FOR = 未確定(空白)因此,當(dāng)您使用高級匿名代理(也稱為精英代理)時,網(wǎng)站所有者無法檢測到您在使用高匿名代理。
當(dāng) Web 服務(wù)器接收到請求時,它將查看這3個標(biāo)頭的內(nèi)容以了解如何響應(yīng)該請求,其中包含 IP 地址,這些 IP 地址充當(dāng) Internet 上的計算機標(biāo)識符并用于位置標(biāo)識。對于高級匿名代理,HTTP_VIA 和 HTTP_X_FORWARDED_FOR 中不包含任何信息。HTTP_VIA 旨在使網(wǎng)站知道請求已通過代理進行路由,而 HTTP_X_FORWARDED_FOR 則用于首先發(fā)起請求的 IP 地址。
由于這兩個為空白,因此服務(wù)器無法知道請求已通過代理路由。為此,將修改 REMOTE_ADDR 并指定其他 IP 地址。這使您更加安全,并隱藏了您的在線身份(IP地址),您將被視為普通用戶。
?
高級匿名代理用例
高匿名代理可用于您可使用匿名代理進行的所有操作。
它們的應(yīng)用領(lǐng)域很多。常規(guī)的 Internet 用戶使用它們來逃避審查并訪問 Internet 上受限制的內(nèi)容和本地內(nèi)容,而 Internet 營銷人員和研究人員將它們用于其他用途。
組織將它們用于品牌保護。在 SEO 以及 web 抓取和爬蟲中已廣泛使用。
-
電子郵件抓取工具:Web 電子郵件抓取服務(wù)和軟件(電子郵件提取器)
自動化專家還將它們用于運動鞋搶購,票務(wù)清算和社交媒體自動化中。它們還用于“廣告”中的廣告驗證。 -
最好的 Craigslist 代理分類廣告發(fā)布;
?
后記
代理這東西還是很有必要的,其實可以在 http://httpbin.org/ip 這個網(wǎng)站測試一下的,透明代理的話就會把你自己的 ip 以及代理 ip 顯示在上面了;
極光會有的,并肩于雪山之巔!
總結(jié)
以上是生活随笔為你收集整理的【复】从0到1的 selenium 爬虫经历的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity 雨水滴到屏幕效果
- 下一篇: egret白鹭 基于eui组件的一些动画