對目標網站的背景調研
- 檢查 robot.txt
- 估算網站大小
- 識別網站所用技術
- 尋找網站的所有者
檢查 robot.txt
- 目的: 大多數的網站都會包含 robot.txt 文件。該文件用于指出使用爬蟲爬取網站時有哪些限制。而我們通過讀 robot.txt 文件,亦可以最小化爬蟲被封禁的可能。
- 方法: 通過在網站地址后面添加 “/robots.txt”,形成完整的網址,獲取該網站對于爬蟲的限制信息;
- 案例:
例如:我們想要知道 https://www.csdn.net 即 CSDN 官網的爬蟲爬取網站的限制,我們可以通過在網址后添加 “/robots.txt”,形成完整網址:https://www.csdn.net/robots.txt,Enter 訪問,看到限制信息如下:
在上圖中,我們發現主要包含兩個屬性:Disallow
以及User-agent
;- 其中,
"User-agent: *"
表示以下所有限制Disallow
適用于所有的網絡爬蟲。 "Disallow: /scripts"
表示不允許任何網絡爬蟲訪問網站上的/scripts
目錄及其下的內容。這意味著爬蟲不應該抓取和索引這個目錄中的任何內容。
- 其中,
而在訪問 baidu 的 robots.txt 文件時,會發現限制不同:
我們提取出第一段解釋一下限制信息:
User-agent: Baiduspider
Disallow: /baidu
Disallow: /s?
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
Disallow: /bh
這段 robots.txt 文件中的內容針對百度搜索引擎的爬蟲(Baiduspider)定義了一系列規則,指示哪些頁面或目錄不應該被該搜索引擎的爬蟲訪問和抓取。這些規則的含義如下:
User-agent: Baiduspider
:這條規則定義了適用于百度搜索引擎爬蟲(Baiduspider)的規則。Disallow: /baidu
:這表示不允許百度爬蟲訪問網站上的 /baidu 目錄及其下的內容。Disallow: /s?
:這表示不允許百度爬蟲訪問類似于 /s? 這樣的路徑,通常這種路徑會包含查詢參數。Disallow: /ulink?
和Disallow: /link?
:這表示不允許百度爬蟲訪問以 /ulink? 或 /link? 開頭的路徑,同樣是限制查詢參數的訪問。Disallow: /home/news/data/
:這表示不允許百度爬蟲訪問 /home/news/data/ 目錄下的內容。Disallow: /bh
:這表示不允許百度爬蟲訪問 /bh 這個路徑。
充分了解如何檢查網站爬蟲限制后,我們下一步
估算網站大小
-
目的: 對于目標網站大小的估算,會影響我們判斷是否采用串行下載還是分布式下載。對于只有數百個 URL 的網站,效率沒有那么重要,只需要串行下載即可,但是對于數百萬個網頁的網站,則需要我們使用分布式下載;
-
方法: 而判斷采用串行下載還是分布式下載的第一步,則是對網站的大小做好估算。通過訪問 Google 高級搜索網站:https://www.google.com/advanced_search
通過 “高級搜索” 搜索關鍵字段,如上圖下圖所示,關于 “理財” 字段全網共有 82,200,000 條結果,即 82,200,000 個網頁;
所以根據結果,我們對于 “理財” 信息的爬取,必須通過分布式下載,而非串行下載,因為網站頁數數量過大。但是如果我們任務比較緊急,我們只需要獲取 baidu 上所有關于 “理財” 字段的網頁信息,我們在上述的高級搜索中添加條件即可:
site:www.baidu.com
,如下圖所示:
如此篩選,我們發現只有 69,000 條結果,而非上千萬條,此時,我們所需時間將大大減少。
識別網站所用技術
-
目的: 網站使用的不同技術,不同框架構建,會對我們如何爬取網站數據有影響。例如,Webpy 框架相對而言比較容易抓取;但是如果改用 AngularJS 構建網站,此時網站內容為動態加載,爬取難度上升;而如果網站使用 ASP.NET 技術,當我們爬取網站時,就必須使用到會話管理和表單提交了。而這些技術與如何爬取的不同方法,將在后續中逐漸闡述出,本節目標為如何得知網址到底使用了什么技術。
-
方法: builtwith 可以檢查網站構建的技術類型;
pip install builtwith
import builtwith builtwith.parse("www.baidu.com")
但是近些年對于爬蟲的限制,導致
builtwith.parse()
函數在很多網站不可用,平替的暫時最好方法,是通過網站:https://www.wappalyzer.com/ 進行查看,但是好像需要付費。
尋找網站的所有者
-
目的: 當然,如何需要找到網站的所有者并與之聯系,我們可以通過使用 WHOIS 協議查詢域名的注冊者是誰。
-
方法: python 有針對協議的封裝庫,具體方案為我們首先:
pip install python-whois
import whois print(whois.whois('www.csdn.net'))
結果為:
-
domain_name:列出了域名的主要名稱和規范名稱,這兩者在大小寫上略有不同,但指向同一個域名。在這里,主要名稱是 “CSDN.NET”,規范名稱是 “csdn.net”。
-
registrar:這是域名的注冊商或注冊服務提供商,即負責管理域名注冊的公司。在這里,注冊商是 “Alibaba Cloud Computing (Beijing) Co., Ltd.”,這是阿里云計算有限公司。
-
whois_server:這是用于查詢域名信息的 WHOIS 服務器。在這里,WHOIS 服務器是 “grs-whois.hichina.com”。
-
updated_date:這是域名信息的最近更新日期。在這里,最近更新的日期是 “2023-01-03 02:19:20”。
-
creation_date:這是域名創建的日期。在這里,域名創建的日期是 “1999-03-11 05:00:00”。
-
expiration_date:這是域名的到期日期。在這里,域名到期的日期是 “2024-03-11 04:00:00”。
-
name_servers:這列出了域名使用的名稱服務器(DNS 服務器),它們負責將域名解析為 IP 地址。在這里,有兩個名稱服務器:“VIP3.ALIDNS.COM” 和 “VIP4.ALIDNS.COM”。
-
status:這個字段列出了域名的狀態信息,使用了ICANN定義的狀態代碼。在這里,狀態是 “clientTransferProhibited” 和 “clientUpdateProhibited”,表示在域名的傳輸和更新方面受到限制。
-
emails:列出了用于與域名注冊信息相關問題聯系的電子郵件地址。在這里,聯系郵箱是 “DomainAbuse@service.aliyun.com”,這是阿里云的服務郵箱。
-
dnssec:這是指定域名是否啟用了 DNSSEC(域名系統安全擴展)。在這里,域名的 DNSSEC 設置是 “unsigned”,即未啟用。
-
state:這個字段提供了域名注冊人所在的州或地區。在這里,注冊人所在地是 “bei jing”,即北京。
-
country:這個字段提供了注冊人所在的國家/地區。在這里,注冊人所在國家是 “CN”,即中國。
這些信息提供了關于域名注冊和管理的詳細信息,包括注冊商、注冊人所在地、到期日期等等。
上述內容即關于網站的背景調研方法;