Python-web-scraping-legality-of-python-web-scraping

提供:Dev Guides
移動先:案内検索

Webスクレイピングの合法性

Pythonを使用すると、WebサイトまたはWebページの特定の要素をスクレイピングできますが、合法かどうかはわかりますか? Webスクレイピングの前に、Webスクレイピングの合法性について知る必要があります。 この章では、Webスクレイピングの合法性に関連する概念について説明します。

前書き

一般に、スクレイピングされたデータを個人的な使用に使用する場合、問題はない可能性があります。 ただし、そのデータを再公開する場合は、同じことを行う前に、所有者にダウンロードリクエストを行うか、スクレイピングするデータに関するポリシーやバックグラウンド調査を行う必要があります。

スクレイピングの前に必要な調査

データをスクレイピングするためにWebサイトをターゲットにしている場合、その規模と構造を理解する必要があります。 以下は、Webスクレイピングを開始する前に分析する必要があるファイルの一部です。

robots.txtの分析

実際、ほとんどの出版社はプログラマーがある程度自分のウェブサイトをクロールすることを許可しています。 他の意味では、出版社はウェブサイトの特定の部分をクロールすることを望んでいます。 これを定義するには、Webサイトは、クロールできる部分とできない部分を示すためのいくつかのルールを設定する必要があります。 このようなルールは、 robots.txt というファイルに定義されています。

*robots.txt* は、クローラーが許可されているかどうかをスクレイピングできないWebサイトの部分を識別するために使用される、人間が読み取れるファイルです。 robots.txtファイルの標準形式はなく、Webサイトの発行者は必要に応じて変更できます。 特定のWebサイトのURLの後にスラッシュとrobots.txtを指定することにより、特定のWebサイトの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:/indexl?
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 リンクは、許可されていないリンクをたどる悪意のあるクローラーをブロックしようとします。 Webサイトの発行者は、要件に応じてさらに多くのルールを定義できます。 それらのいくつかはここで議論されています-

サイトマップファイルの分析

更新された情報を求めてWebサイトをクロールする場合はどうするべきですか? 更新された情報を取得するためにすべてのWebページをクロールしますが、これにより特定のWebサイトのサーバートラフィックが増加します。 ウェブサイトがサイトマップファイルを提供している理由は、クローラーがすべてのウェブページをクロールすることなく更新コンテンツを見つけるのを支援するためです。 サイトマップ標準はhttp://www.sitemaps.org/protocollで定義されています。

サイトマップファイルのコンテンツ

以下は、robot.txtファイルで発見されたhttps://www.microsoft.com/robots.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について。

ウェブサイトのサイズは?

ウェブサイトのサイズ、つまり WebサイトのWebページの数は、クロールの方法に影響しますか? もちろんそうです。 クロールするWebページの数が少ない場合、効率は深刻な問題にはなりませんが、Microsoft.comなどのWebページに数百万のWebページがある場合、各Webページを連続してダウンロードするには数か月かかり、効率性は深刻な問題になります。

ウェブサイトのサイズを確認する

Googleのクローラーの結果のサイズを確認することで、ウェブサイトのサイズを推定できます。 Google検索の実行中にキーワード site を使用して、結果をフィルタリングできます。 たとえば、https://authoraditiagarwal.com/のサイズの見積もりは以下のとおりです-

サイズの確認

約60の結果があることがわかります。これは、大きなWebサイトではなく、クロールしても効率の問題が発生しないことを意味します。

ウェブサイトで使用されているテクノロジーはどれですか?

もう1つの重要な質問は、Webサイトで使用されているテクノロジーがクロール方法に影響するかどうかです。 はい、影響します。 しかし、ウェブサイトで使用されているテクノロジーについてはどうすれば確認できますか? builtwith という名前のPythonライブラリがあり、その助けを借りてWebサイトで使用されているテクノロジーについて調べることができます。

この例では、https://authoraditiagarwal.comというWebサイトで使用されているテクノロジーを、Pythonライブラリ builtwith を使用して確認します。 しかし、このライブラリを使用する前に、次のようにインストールする必要があります-

(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']}

ウェブサイトの所有者は誰ですか?

Webサイトの所有者も重要です。所有者がクローラーをブロックすることで知られている場合、クローラーはWebサイトからデータをスクレイピングする際に注意する必要があるためです。 Whois という名前のプロトコルがあり、これを使用してWebサイトの所有者を確認できます。

この例では、Whoisの助けを借りて、https://www.microsoft.com/en-in/[microsoft.com]と言うWebサイトの所有者を確認します。 しかし、このライブラリを使用する前に、次のようにインストールする必要があります-

(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": [
      "[email protected]",
      "[email protected]",
      "[email protected]",
      "[email protected]"
   ],
}