本來以為經歷前面四道坑,算是走到了反爬的頂端,沒想到不到三個月再次倒下了,因為之前的爬蟲程式突然被反爬了,怎都拿不到資料,一開始以為自己的**ip被封了,但是我乙個乙個試,換了好多個**ip,沒有乙個有用的,難道天下所有的ip都被封了嘛。一開始我是這麼認為的。乙個偶然,就是我用本地的瀏覽器來爬資料,是可以的,於是我給本地瀏覽器也加了乙個**ip,發現還是可以的,而同樣的**ip在linux就不行了。
那原因基本就定位到了,是因為window上我們使用的是正常的瀏覽器,而linux上我們使用的是無頭瀏覽器,為了證明這個原因,我在window上啟動谷歌瀏覽器的時候加上–headness引數,以無頭的形式啟動,果然這樣是無法爬取到資料的,也就是是否無頭存在一些特徵被暴露出去了。而且根據是否無頭來判斷是否是爬蟲也很準,因為普通使用者是不可能用無頭瀏覽器來進行瀏覽資料的,那一定就是爬蟲了。應對這個反爬兩種思路,一種是抹去無頭痕跡,另一種是直接使用有頭瀏覽器。一開始是想用第一種方式的,結果很難解決,最終走第二條路,第二條路也有兩個思路,一再linux上使用xvfb,看網上其實有很多關於這個方法的教程,但是我在自己的centos操作時,沒法實現,最終我選擇租了一台低配真的window伺服器,然後上面安裝了谷歌瀏覽器。
那最終就是無非是把這個window伺服器上的谷歌瀏覽器對外開發埠使用了,但這裡會遇到乙個和之前linux同樣的問題,就是chrome預設的遠端呼叫埠是只對本地訪問的,所以需要另外乙個埠來進行**,之前linux上是通過ssh來建立乙個**隧道的。window上同樣也有方法實現這種**:
解釋一下這其中的引數意義
1.listenaddress – 等待連線的本地ip位址
2.listenport – 本地監聽的tcp埠(待**)
3.connectaddress – 被**埠的本地或者遠端主機的ip位址
4.connectport – 被**的埠
這裡舉個例子,伺服器內網ip是172.16.0.4,需要將8080埠**到國外伺服器104.104.104.104的9999埠,那麼命令如下:
netsh inte***ce portproxy add v4tov4 listenaddress=172.16.0.4 listenport=8080 connectaddress=104.104.104.104 connectport=9999
下面的命令是用來展示系統中的所有**規則:
netsh inte***ce portproxy show v4tov4
而我們這裡,是需要任意客戶端請求9023埠的資料,**到本地9022埠,所以命令如下:
netsh inte***ce portproxy add v4tov4 listenaddress=0.0.0.0 listenport=9023 connectaddress=127.0.0.1 connectport=9022
切記listenaddress這個要寫0.0.0.0,不能寫本地ip,否則只能本地訪問了,另外就是開啟安全組,關閉防火牆了。最後可以通過
telnet ip 9023
來看看埠是否能聯通
python爬蟲高階 無頭瀏覽器的使用
1 phantomjs selenium 示例 def phantomjs url test url dcap dict desiredcapabilities.phantomjs dcap phantomjs.page.settings.useragent dcap phantomjs.page....
selenium設定谷歌瀏覽器「無頭」模式
我們在做自動化測試的時候,經常會調起瀏覽器然後根據測試 進行業務操作,但是往往我們在將自動化進行持續整合的時候我們往往不希望總是調起瀏覽器進行業務操作,所以我們可以講瀏覽器進行設定 無頭 模式進行自動化測試 設定 如下 system.setproperty webdriver.chrome.driv...
Selenium 谷歌無頭瀏覽器和預防檢測
from selenium import webdriver bro webdriver.chrome chromedriver.exe bro.get page text bro.page source print page text 無頭瀏覽器的使用 from selenium import w...