網路爬取的合法性



使用Python,我們可以爬取任何網站或網頁的特定元素,但您是否知道這是否合法?在爬取任何網站之前,我們必須瞭解網路爬取的合法性。本章將解釋與網路爬取合法性相關的概念。

介紹

通常,如果您要將爬取的資料用於個人用途,那麼可能不會有任何問題。但是,如果您要重新發布該資料,那麼在這樣做之前,您應該向所有者發出下載請求,或對您要爬取的資料的策略進行一些背景調查。

爬取前所需的研究

如果您要針對某個網站進行資料爬取,我們需要了解其規模和結構。以下是我們在開始網路爬取之前需要分析的一些檔案。

分析robots.txt

實際上,大多數釋出者允許程式設計師在一定程度上抓取他們的網站。換句話說,釋出者希望抓取網站的特定部分。為了定義這一點,網站必須制定一些規則來宣告哪些部分可以抓取,哪些部分不可以抓取。這些規則定義在一個名為robots.txt的檔案中。

robots.txt是一個人類可讀的檔案,用於識別爬蟲允許和不允許抓取的網站部分。robots.txt檔案沒有標準格式,網站釋出者可以根據需要進行修改。我們可以透過在該網站的URL後新增斜槓和robots.txt來檢查特定網站的robots.txt檔案。例如,如果我們要檢查Google.com,則需要輸入https://www.google.com/robots.txt,我們將得到如下內容:

User-agent: *
Disallow: /search
Allow: /search/about
Allow: /search/static
Allow: /search/howsearchworks
Disallow: /sdch
Disallow: /groups
Disallow: /index.html?
Disallow: /?
Allow: /?hl=
Disallow: /?hl=*&
Allow: /?hl=*&gws_rd=ssl$
and so on……..

網站的robots.txt檔案中定義的一些最常見的規則如下:

   User-agent: BadCrawler
Disallow: /

上述規則意味著robots.txt檔案要求使用者代理為BadCrawler的爬蟲不要抓取其網站。

User-agent: *
Crawl-delay: 5
Disallow: /trap

上述規則意味著robots.txt檔案將所有使用者代理的爬蟲在下載請求之間的延遲設定為5秒,以避免伺服器過載。/trap連結將嘗試阻止遵循不允許連結的惡意爬蟲。釋出者可以根據需要定義更多規則。其中一些規則在此處討論:

分析站點地圖檔案

如果您想爬取網站以獲取更新的資訊,您應該怎麼做?您將爬取每個網頁以獲取更新的資訊,但這將增加特定網站的伺服器流量。這就是為什麼網站提供站點地圖檔案來幫助爬蟲定位更新內容,而無需爬取每個網頁。站點地圖標準在http://www.sitemaps.org/protocol.html中定義。

站點地圖檔案的內容

以下是https://www.microsoft.com/robots.txt的站點地圖檔案的內容,該檔案在robot.txt檔案中發現:

Sitemap: https://www.microsoft.com/en-us/explore/msft_sitemap_index.xml
Sitemap: https://www.microsoft.com/learning/sitemap.xml
Sitemap: https://www.microsoft.com/en-us/licensing/sitemap.xml
Sitemap: https://www.microsoft.com/en-us/legal/sitemap.xml
Sitemap: https://www.microsoft.com/filedata/sitemaps/RW5xN8
Sitemap: https://www.microsoft.com/store/collections.xml
Sitemap: https://www.microsoft.com/store/productdetailpages.index.xml
Sitemap: https://www.microsoft.com/en-us/store/locations/store-locationssitemap.xml

上述內容顯示,站點地圖列出了網站上的URL,並進一步允許網站管理員為每個URL指定一些其他資訊,例如上次更新日期、內容更改、與其他URL相關的URL重要性等。

網站的大小是多少?

網站的大小,即網站的網頁數量,是否會影響我們的爬取方式?當然會。因為如果我們要爬取的網頁數量較少,那麼效率不會是一個嚴重的問題,但是如果我們的網站有數百萬個網頁,例如Microsoft.com,那麼按順序下載每個網頁將需要幾個月的時間,那麼效率將是一個嚴重的問題。

檢查網站的大小

透過檢查Google爬蟲結果的大小,我們可以估計網站的大小。在進行Google搜尋時,我們可以使用關鍵字site來過濾我們的結果。例如,下面給出了對https://authoraditiagarwal.com/大小的估計:

Checking The Size

您可以看到大約有60個結果,這意味著它不是一個大型網站,爬取不會導致效率問題。

網站使用了什麼技術?

另一個重要的問題是網站使用的技術是否會影響我們的爬取方式?是的,會影響。但是我們如何檢查網站使用的技術呢?有一個名為builtwith的Python庫,我們可以用它來找出網站使用的技術。

示例

在這個例子中,我們將使用Python庫builtwith來檢查網站https://authoraditiagarwal.com使用的技術。但在使用此庫之前,我們需要安裝它,方法如下:

(base) D:\ProgramData>pip install builtwith
Collecting builtwith
   Downloading
https://files.pythonhosted.org/packages/9b/b8/4a320be83bb3c9c1b3ac3f9469a5d66e0
2918e20d226aa97a3e86bddd130/builtwith-1.3.3.tar.gz
Requirement already satisfied: six in d:\programdata\lib\site-packages (from
builtwith) (1.10.0)
Building wheels for collected packages: builtwith
   Running setup.py bdist_wheel for builtwith ... done
   Stored in directory:
C:\Users\gaurav\AppData\Local\pip\Cache\wheels\2b\00\c2\a96241e7fe520e75093898b
f926764a924873e0304f10b2524
Successfully built builtwith
Installing collected packages: builtwith
Successfully installed builtwith-1.3.3

現在,藉助以下簡單的幾行程式碼,我們可以檢查特定網站使用的技術:

In [1]: import builtwith
In [2]: builtwith.parse('http://authoraditiagarwal.com')
Out[2]:
{'blogs': ['PHP', 'WordPress'],
   'cms': ['WordPress'],
   'ecommerce': ['WooCommerce'],
   'font-scripts': ['Font Awesome'],
   'javascript-frameworks': ['jQuery'],
   'programming-languages': ['PHP'],
   'web-servers': ['Apache']}

網站的所有者是誰?

網站的所有者也很重要,因為如果所有者以阻止爬蟲而聞名,那麼爬蟲在從網站爬取資料時必須小心。有一個名為Whois的協議,我們可以用它來找出網站的所有者。

示例

在這個例子中,我們將使用Whois來檢查網站microsoft.com的所有者。但在使用此庫之前,我們需要安裝它,方法如下:

(base) D:\ProgramData>pip install python-whois
Collecting python-whois
   Downloading
https://files.pythonhosted.org/packages/63/8a/8ed58b8b28b6200ce1cdfe4e4f3bbc8b8
5a79eef2aa615ec2fef511b3d68/python-whois-0.7.0.tar.gz (82kB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 92kB 164kB/s
Requirement already satisfied: future in d:\programdata\lib\site-packages (from
python-whois) (0.16.0)
Building wheels for collected packages: python-whois
   Running setup.py bdist_wheel for python-whois ... done
   Stored in directory:
C:\Users\gaurav\AppData\Local\pip\Cache\wheels\06\cb\7d\33704632b0e1bb64460dc2b
4dcc81ab212a3d5e52ab32dc531
Successfully built python-whois
Installing collected packages: python-whois
Successfully installed python-whois-0.7.0

現在,藉助以下簡單的幾行程式碼,我們可以檢查特定網站使用的技術:

In [1]: import whois
In [2]: print (whois.whois('microsoft.com'))
{
   "domain_name": [
      "MICROSOFT.COM",
      "microsoft.com"
   ],
   -------
   "name_servers": [
      "NS1.MSFT.NET",
      "NS2.MSFT.NET",
      "NS3.MSFT.NET",
      "NS4.MSFT.NET",
      "ns3.msft.net",
      "ns1.msft.net",
      "ns4.msft.net",
      "ns2.msft.net"
   ],
   "emails": [
      "abusecomplaints@markmonitor.com",
      "domains@microsoft.com",
      "msnhst@microsoft.com",
      "whoisrelay@markmonitor.com"
   ],
}
廣告