亚欧成人毛片一区二区三区四区-亚欧成人乱码一区二区-亚久久伊人精品青青草原2020-亚飞与亚基在线观看-国产综合成人观看在线-国产综合91天堂亚洲国产

資訊

IT'S A SERVICE THAT TOUCHES YOU

吸引你的也許是品牌,感動你的絕對是服務

首頁>>資訊>>常見問題 > 為什么很多企業網站做好之后搜索引擎蜘蛛網不能抓取

為什么很多企業網站做好之后搜索引擎蜘蛛網不能抓取

為什么很多企業網站做好之后搜索引擎蜘蛛網不能抓取

資訊分類:常見問題 | 文章編輯:陳婷 | 發布日期:2020-01-19 | 瀏覽量:3193次

為何大量網站不能抓取?爬蟲突破封禁的6種常見方法,網站防采集的前提就是要正確地區分人類訪問用戶和網絡機器人。雖然網站可以使用很多識別技術(比如驗證碼)來防止爬蟲,但還是有一些十分簡單的方法,可以讓你的網絡機器人看起來更像人類訪問用戶。


1. 構造合理的 HTTP 請求頭

除了處理網站表單,requests 模塊還是一個設置請求頭的利器。HTTP 的請求頭是在你每次向網絡服務器發送請求時,傳遞的一組屬性和配置信息。HTTP 定義了十幾種古怪的請求頭類型,不過大多數都不常用。只有下面的七個字段被大多數瀏覽器用來初始化所有網絡請求(表中信息是我自己瀏覽器的數據)。


為何大量網站不能抓取?爬蟲突破封禁的6種常見方法


經典的 Python 爬蟲在使用 urllib 標準庫時,都會發送如下的請求頭:


為何大量網站不能抓取?爬蟲突破封禁的6種常見方法


如果你是一個防范爬蟲的網站管理員,你會讓哪個請求頭訪問你的網站呢?


雖然網站可能會對 HTTP 請求頭的每個屬性進行“是否具有人性”的檢查,但是我發現通常真正重要的參數就是 User-Agent。無論做什么項目,一定要記得把 User-Agent 屬性設置成不容易引起懷疑的內容,不要用 Python-urllib/3.4。另外,如果你正在處理一個警覺性非常高的網站,就要注意那些經常用卻很少檢查的請求頭,比如 Accept-Language 屬性,也許它正是那個網站判斷你是個人類訪問者的關鍵。


請求頭會改變你觀看網絡世界的方式


假設你想為一個機器學習的研究項目寫一個語言翻譯機,卻沒有大量的翻譯文本來測試它的效果。很多大型網站都會為同樣的內容提供不同的語言翻譯,根據請求頭的參數響應網站不同的語言版本。因此,你只要簡單地把請求頭屬性從 Accept-Language:en-US修改成Accept-Language:fr,就可以從網站上獲得“Bonjour”(法語,你好)這些數據來改善翻譯機的翻譯效果了(大型跨國企業通常都是好的采集對象)。


請求頭還可以讓網站改變內容的布局樣式。例如,用移動設備瀏覽網站時,通常會看到一個沒有廣告、Flash 以及其他干擾的簡化的網站版本。因此,把你的請求頭 User-Agent 改成下面這樣,就可以看到一個更容易采集的網站了!


User-Agent:Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) App leWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53


 


2. 設置 cookie 的學問

雖然 cookie 是一把雙刃劍,但正確地處理 cookie 可以避免許多采集問題。網站會用 cookie 跟蹤你的訪問過程,如果發現了爬蟲異常行為就會中斷你的訪問,比如特別快速地填寫表單,或者瀏覽大量頁面。雖然這些行為可以通過關閉并重新連接或者改變 IP 地址來偽裝,但是如果 cookie 暴露了你的身份,再多努力也是白費。


在采集一些網站時 cookie 是不可或缺的。要在一個網站上持續保持登錄狀態,需要在多個頁面中保存一個 cookie。有些網站不要求在每次登錄時都獲得一個新 cookie,只要保存一個舊的“已登錄”的 cookie 就可以訪問。


如果你在采集一個或者幾個目標網站,建議你檢查這些網站生成的 cookie,然后想想哪一個 cookie 是爬蟲需要處理的。有一些瀏覽器插件可以為你顯示訪問網站和離開網站時 cookie 是如何設置的。EditThisCookie(http://www.editthiscookie.com/)是我最喜歡的 Chrome 瀏覽器插件之一。


因為 requests 模塊不能執行 JavaScript,所以它不能處理很多新式的跟蹤軟件生成的 cookie,比如 Google Analytics,只有當客戶端腳本執行后才設置 cookie(或者在用戶瀏覽頁面時基于網頁事件產生 cookie,比如點擊按鈕)。要處理這些動作,需要用 Selenium 和 PhantomJS 包。


Selenium 與 PhantomJS


Selenium(http://www.seleniumhq.org/)是一個強大的網絡數據采集工具,最初是為網站自動化測試而開發的。近幾年,它還被廣泛用于獲取精確的網站快照,因為它們可以直接運行在瀏覽器上。Selenium 可以讓瀏覽器自動加載頁面,獲取需要的數據,甚至頁面截屏,或者判斷網站上某些動作是否發生。


Selenium 自己不帶瀏覽器,它需要與第三方瀏覽器結合在一起使用。例如,如果你在 Firefox 上運行 Selenium,可以直接看到 Firefox 窗口被打開,進入網站,然后執行你在代碼中設置的動作。雖然這樣可以看得更清楚,但是我更喜歡讓程序在后臺運行,所以我 PhantomJS(http://phantomjs.org/download.html)代替真實的瀏覽器。


PhantomJS 是一個“無頭”(headless)瀏覽器。它會把網站加載到內存并執行頁面上的 JavaScript,但不會向用戶展示網頁的圖形界面。將 Selenium 和 PhantomJS 結合在一起,就可以運行一個非常強大的網絡爬蟲了,可以處理 cookie、JavaScrip、header,以及任何你需要做的事情。


可以從PyPI網站(https://pypi.python.org/simple/selenium/)下載Selenium庫,也可以用第三方管理器(像pip)用命令行安裝。


你可以對任意網站(本例用的是 http://pythonscraping.com)調用 webdriver 的 get_cookie方法來查看 cookie:


為何大量網站不能抓取?爬蟲突破封禁的6種常見方法


點擊可查看大圖


這樣就可以獲得一個非常典型的 Google Analytics 的 cookie 列表:


為何大量網站不能抓取?爬蟲突破封禁的6種常見方法


點擊可查看大圖


還可以調用 delete_cookie、add_cookie 和 delete_all_cookies 方法來處理 cookie。另外,還可以保存 cookie 以備其他網絡爬蟲使用。下面的例子演示了如何把這些函數組合在一起:


為何大量網站不能抓取?爬蟲突破封禁的6種常見方法


點擊可查看大圖


在這個例子中,第一個 webdriver 獲得了一個網站,打印 cookie 并把它們保存到變量savedCookies 里。第二個 webdriver 加載同一個網站(技術提示:必須首先加載網站,這樣 Selenium 才能知道 cookie 屬于哪個網站,即使加載網站的行為對我們沒任何用處),刪除所有的 cookie,然后替換成第一個 webdriver 得到的 cookie。當再次加載這個頁面時,兩組 cookie 的時間戳、源代碼和其他信息應該完全一致。從 Google Analytics 的角度看,第二個 webdriver 現在和第一個 webdriver 完全一樣。


 


3. 正常的時間訪問路徑

有一些防護措施完備的網站可能會阻止你快速地提交表單,或者快速地與網站進行交互。即使沒有這些安全措施,用一個比普通人快很多的速度從一個網站下載大量信息也可能讓自己被網站封殺。


因此,雖然多線程程序可能是一個快速加載頁面的好辦法——在一個線程中處理數據,另一個線程中加載頁面——但是這對編寫好的爬蟲來說是恐怖的策略。還是應該盡量保證一次加載頁面加載且數據請求最小化。如果條件允許,盡量為每個頁面訪問增加一點兒時間間隔,即使你要增加一行代碼:


time.sleep(3)

(小編:3 + 隨機數 是不是更好一些?)


合理控制速度是你不應該破壞的規則。過度消耗別人的服務器資源會讓你置身于非法境地,更嚴重的是這么做可能會把一個小型網站拖垮甚至下線。拖垮網站是不道德的,是徹頭徹尾的錯誤。所以請控制采集速度!


 


常見表單反爬蟲安全措施解密

許多像 Litmus 之類的測試工具已經用了很多年了,現在仍用于區分網絡爬蟲和使用瀏覽器的人類訪問者,這類手段都取得了不同程度的效果。雖然網絡機器人下載一些公開的文章和博文并不是什么大事,但是如果網絡機器人在你的網站上創造了幾千個賬號并開始向所有用戶發送垃圾郵件,就是一個大問題了。網絡表單,尤其是那些用于賬號創建和登錄的網站,如果被機器人肆意地濫用,網站的安全和流量費用就會面臨嚴重威脅,因此努力限制網站的接入是最符合許多網站所有者的利益的(至少他們這么認為)。


這些集中在表單和登錄環節上的反機器人安全措施,對網絡爬蟲來說確實是嚴重的挑戰。


 


4. 注意隱含輸入字段值

在 HTML 表單中,“隱含”字段可以讓字段的值對瀏覽器可見,但是對用戶不可見(除非看網頁源代碼)。隨著越來越多的網站開始用 cookie 存儲狀態變量來管理用戶狀態,在找到另一個最佳用途之前,隱含字段主要用于阻止爬蟲自動提交表單。


下圖顯示的例子就是 Facebook 登錄頁面上的隱含字段。雖然表單里只有三個可見字段(username、password 和一個確認按鈕),但是在源代碼里表單會向服務器傳送大量的信息。


為何大量網站不能抓取?爬蟲突破封禁的6種常見方法


Facebook 登錄頁面上的隱含字段


用隱含字段阻止網絡數據采集的方式主要有兩種。第一種是表單頁面上的一個字段可以用服務器生成的隨機變量表示。如果提交時這個值不在表單處理頁面上,服務器就有理由認為這個提交不是從原始表單頁面上提交的,而是由一個網絡機器人直接提交到表單處理頁面的。繞開這個問題的最佳方法就是,首先采集表單所在頁面上生成的隨機變量,然后再提交到表單處理頁面。


第二種方式是“蜜罐”(honey pot)。如果表單里包含一個具有普通名稱的隱含字段(設置蜜罐圈套),比如“用戶名”(username)或“郵箱地址”(email address),設計不太好的網絡機器人往往不管這個字段是不是對用戶可見,直接填寫這個字段并向服務器提交,這樣就會中服務器的蜜罐圈套。服務器會把所有隱含字段的真實值(或者與表單提交頁面的默認值不同的值)都忽略,而且填寫隱含字段的訪問用戶也可能被網站封殺。


總之,有時檢查表單所在的頁面十分必要,看看有沒有遺漏或弄錯一些服務器預先設定好的隱含字段(蜜罐圈套)。如果你看到一些隱含字段,通常帶有較大的隨機字符串變量,那么很可能網絡服務器會在表單提交的時候檢查它們。另外,還有其他一些檢查,用來保證這些當前生成的表單變量只被使用一次或是最近生成的(這樣可以避免變量被簡單地存儲到一個程序中反復使用)。


 


5. 爬蟲通常如何避開蜜罐

雖然在進行網絡數據采集時用 CSS 屬性區分有用信息和無用信息會很容易(比如,通過讀取 id和 class 標簽獲取信息),但這么做有時也會出問題。如果網絡表單的一個字段通過 CSS 設置成對用戶不可見,那么可以認為普通用戶訪問網站的時候不能填寫這個字段,因為它沒有顯示在瀏覽器上。如果這個字段被填寫了,就可能是機器人干的,因此這個提交會失效。


這種手段不僅可以應用在網站的表單上,還可以應用在鏈接、圖片、文件,以及一些可以被機器人讀取,但普通用戶在瀏覽器上卻看不到的任何內容上面。訪問者如果訪問了網站上的一個“隱含”內容,就會觸發服務器腳本封殺這個用戶的 IP 地址,把這個用戶踢出網站,或者采取其他措施禁止這個用戶接入網站。實際上,許多商業模式就是在干這些事情。


下面的例子所用的網頁在 http://pythonscraping.com/pages/itsatrap.html。這個頁面包含了兩個鏈接,一個通過 CSS 隱含了,另一個是可見的。另外,頁面上還包括兩個隱含字段:


為何大量網站不能抓取?爬蟲突破封禁的6種常見方法


點擊可查看大圖


這三個元素通過三種不同的方式對用戶隱藏:


第一個鏈接是通過簡單的 CSS 屬性設置 display:none進行隱藏


電話號碼字段 name="phone"是一個隱含的輸入字段


郵箱地址字段 name="email"是將元素向右移動 50 000 像素(應該會超出電腦顯示器的邊界)并隱藏滾動條


因為 Selenium 可以獲取訪問頁面的內容,所以它可以區分頁面上的可見元素與隱含元素。通過 is_displayed 可以判斷元素在頁面上是否可見。


例如,下面的代碼示例就是獲取前面那個頁面的內容,然后查找隱含鏈接和隱含輸入字段:


為何大量網站不能抓取?爬蟲突破封禁的6種常見方法


點擊可查看大圖


Selenium 抓取出了每個隱含的鏈接和字段,結果如下所示:


為何大量網站不能抓取?爬蟲突破封禁的6種常見方法


點擊可查看大圖


雖然你不太可能會去訪問你找到的那些隱含鏈接,但是在提交前,記得確認一下那些已經在表單中、準備提交的隱含字段的值(或者讓 Selenium 為你自動提交)。


 


使用遠程服務器來避免 IP 封鎖

啟用遠程平臺的人通常有兩個目的:對更大計算能力和靈活性的需求,以及對可變 IP 地址的需求。


 


6. 使用可變的遠程 IP 地址

建立網絡爬蟲的第一原則是:所有信息都可以偽造。你可以用非本人的郵箱發送郵件,通過命令行自動化鼠標的行為,或者通過 IE 5.0 瀏覽器耗費網站流量來嚇唬網管。


但是有一件事情是不能作假的,那就是你的 IP 地址。任何人都可以用這個地址給你寫信:“美國華盛頓特區賓夕法尼亞大道西北 1600 號,總統,郵編 20500。”但是,如果這封信是從新墨西哥州的阿爾伯克基市發來的,那么你肯定可以確信給你寫信的不是美國總統。


從技術上說,IP 地址是可以通過發送數據包進行偽裝的,就是分布式拒絕服務攻擊技術(Distributed Denial of Service,DDoS),攻擊者不需要關心接收的數據包(這樣發送請求的時候就可以使用假 IP 地址)。但是網絡數據采集是一種需要關心服務器響應的行為,所以我們認為 IP 地址是不能造假的。


阻止網站被采集的注意力主要集中在識別人類與機器人的行為差異上面。封殺 IP 地址這種矯枉過正的行為,就好像是農民不靠噴農藥給莊稼殺蟲,而是直接用火燒徹底解決問題。它是最后一步棋,不過是一種非常有效的方法,只要忽略危險 IP 地址發來的數據包就可以了。但是,使用這種方法會遇到以下幾個問題。


IP 地址訪問列表很難維護。雖然大多數大型網站都會用自己的程序自動管理 IP 地址訪問列表(機器人封殺機器人),但是至少需要人偶爾檢查一下列表,或者至少要監控問題的增長。


因為服務器需要根據 IP 地址訪問列表去檢查每個準備接收的數據包,所以檢查接收數據包時會額外增加一些處理時間。多個 IP 地址乘以海量的數據包更會使檢查時間指數級增長。為了降低處理時間和處理復雜度,管理員通常會對 IP 地址進行分組管理并制定相應的規則,比如如果這組 IP 中有一些危險分子就“把這個區間的所有 256 個地址全部封殺”。于是產生了下一個問題。


封殺 IP 地址可能會導致意外后果。例如,當我還在美國麻省歐林工程學院讀本科的時候,有個同學寫了一個可以在 http://digg.com/網站(在 Reddit 流行之前大家都用 Digg)上對熱門內容進行投票的軟件。這個軟件的服務器 IP 地址被 Digg 封殺,導致整個網站都不能訪問。于是這個同學就把軟件移到了另一個服務器上,而 Digg 自己卻失去了許多主要目標用戶的訪問量。


卓商網-聯系方式

東莞公司
服務熱線:0769-89801111(總機)
地址:東莞市南城區莞太路60號星鵬商務大廈B座8樓
深圳公司
服務熱線:400-800-2455(免長途費)
地址:深圳市龍崗區布吉街道大都匯大廈B座1605室
惠州公司
服務熱線:13549397005(陳婷)
地址:惠州市惠城區麥科特大道69號達利大廈1807室
廣州公司
服務熱線:18607694001(馬先生)
地址:廣東省廣州市白云區機場路匯創意產業園A4棟206室
湖南公司
服務熱線:18607314008(胡先生)
地址:湖南長沙市岳麓區學士路8號含浦科教綜合樓601室

—— 卓商網微信公眾號 ——

国产精品久久777777换脸| 亚洲色图五月天| 强行糟蹋人妻hd中文| 91麻豆免费看片| 成人黄色免费在线观看| 你懂的国产在线| 日本动漫理论片在线观看网站 | 国产a视频精品免费观看| 久草福利在线观看| 免费在线色视频| 一本色道久久综合狠狠躁篇的优点 | 欧美午夜寂寞影院| 欧美日韩成人免费观看| 久久精品亚洲麻豆av一区二区| 国产成人啪精品午夜在线观看| 久久精品一区二区| 久久狠狠高潮亚洲精品| av成人动漫| 精品久久久久香蕉网| 伊人久久大香线蕉午夜av| 在线中文视频| 国产丝袜视频一区| 无人日本免费视频| 小嫩嫩12欧美| 欧美极品xxxx| 欧美高清性粉嫩交| 色吧亚洲视频| 亚洲麻豆一区| 国产成人免费在线观看视频| 官网99热精品| 午夜免费福利在线| 日韩不卡视频在线| 美女桃色网站| 成人影院一区二区三区| 中文字幕在线官网| 粉嫩一区二区| 日日夜夜一区二区| 在线观看亚洲精品视频| 国产精品99导航| 国产精品日韩三级| eeuss中文| av小说在线观看| 亚洲欧洲国产综合| 毛片在线播放a| 欧美日韩视频一区二区三区| 亚洲日本一区二区三区| 久久国内精品一国内精品| 亚洲精品乱码久久久久久蜜桃91| 欧美亚洲精品一区二区| 任你操这里只有精品| 国产污视频网站| 国产黄色免费网| 久久视频在线观看| 久久久午夜精品理论片中文字幕| 亚洲区免费影片| 中文字幕在线亚洲三区| 久久一二三四区| 福利在线免费| 国产成人影院| 一区av在线播放| 国产成人欧美在线观看| 人妻换人妻仑乱| 884aa四虎免费影库4h| a级大胆欧美人体大胆666| 久久亚洲风情| 日韩精品免费在线播放| 性日韩欧美在线视频| 91网址在线播放| 亚洲一区二区偷拍| 免费毛片在线播放免费| a级免费观看| 欧美精品密入口播放| 僵尸再翻生在线观看| 91免费欧美精品| 成人黄网大全在线观看| 欧美性videosxxxxx| 国产精品久久久久久久免费看| 亚洲婷婷综合久久一本伊一区| 少妇高潮一区二区三区99小说| 日韩一区二区三区观看| 色多多视频在线观看| 欧美精品在线一区二区三区| 麻豆资源在线| 91九色综合久久| 妖精一区二区三区精品视频| 亚洲狠狠婷婷综合久久久久图片| 色噜噜狠狠一区二区三区果冻| 麻豆国产精品777777在线| 色135综合网| 国产欧美日本一区二区三区| 偷拍亚洲欧洲综合| 色综合伊人色综合网| 国产精品免费观看久久| 国产老头老太做爰视频| 成人永久免费网站| 国产精品久久天天影视| 色悠久久久久综合欧美99| 亚洲少妇中文在线| 久久精品国产精品亚洲色婷婷| 伊人亚洲综合网| 久久影院午夜精品| 国产午夜精品一区二区三区嫩草| 日韩电影在线观看中文字幕| 欧美三级在线观看视频| 婷婷在线精品视频| 校园春色综合| 精品亚洲国产成人av制服丝袜 | 精品精品国产毛片在线看| 欧美性猛交xxxx乱大交| 青青成人在线| 亚洲精品成av人片天堂无码| 五月亚洲婷婷| 久久综合久久久久88| 国产狼人综合免费视频| 日产精品久久久| 波多野结衣中文字幕久久| |精品福利一区二区三区| 欧美在线3区| 最好2018中文免费视频 | 日韩电影网在线| 在线播放黄色av| www.三区| 日本在线播放一区二区三区| 草民午夜欧美限制a级福利片| 久久99精品国产| 青青草手机在线| 校园春色 亚洲色图| 欧美一区二区三区在| 亚洲图片小说视频| 久久精品成人动漫| 91蝌蚪视频在线观看| 九九视频九九热| 欧美黄色免费看| 精品97人妻无码中文永久在线| 第一福利在线| 久久久久国产一区二区三区四区 | 黄色国产在线播放| 视频三区在线观看| 粉嫩13p一区二区三区| 国产色视频一区| 日韩精品一区二区三区不卡| 日本丰满www色| 亚洲专区一区| 青草青草久热精品视频在线观看| 国产精品7777| 国产成人a视频高清在线观看| 色噜噜夜夜夜综合网| 亚洲天堂av一区二区| 最新亚洲伊人网| 国产成人av一区二区三区在线| 99在线观看视频网站| 色婷婷在线影院| 中中文字幕av在线| 精品一区二区三区在线观看 | 色婷婷精品久久二区二区蜜臀av| 亚洲美免无码中文字幕在线| 偷窥自拍亚洲色图| 国产成人免费网站| 欧洲在线视频一区| 国产麻豆精品一区二区三区v视界| 99国产成+人+综合+亚洲欧美| 久久久久久国产免费| 中国一级片黄色一级片黄| 日韩系列在线| 精品视频9999| 真实新婚偷拍xxxxx| 三级外国片在线观看视频| 亚洲三级在线观看| 欧美视频在线第一页| 中文字幕福利片| 国产视频亚洲色图| 91成人在线视频观看| 网站一区二区三区| 色姑娘资源站| 成人av网站免费| 久草免费福利在线| 又黄又www| 午夜久久久影院| 中国黄色片视频| 欧美日韩尤物久久| 色偷偷偷综合中文字幕;dd| 伊人网av在线| 亚洲免费影视| 日韩精品av一区二区三区| 大香一本蕉伊线亚洲网| 自拍偷拍亚洲欧美日韩| 九九热视频免费| 性欧美又大又长又硬| 亚洲天堂第二页| 国产精品一二三四五区| 亚洲精品少妇| 日韩激情久久| 欧美亚洲日本| 制服丝袜亚洲网站| 日本一级一片免费视频| 欧美一区亚洲| 日韩电影大全在线观看| 污视频免费在线看| 91精品国产乱码| 亚洲黄网在线观看|