Webスクレイピングの合法性
Pythonを使用すると、任意のWebサイトまたはWebページの特定の要素をスクレイプできますが、それが合法であるかどうかについて何か考えがありますか?ウェブサイトをスクレイピングする前に、ウェブスクレイピングの合法性について知っておく必要があります。この章では、Webスクレイピングの合法性に関連する概念について説明します。
前書き
一般的に、スクレイピングされたデータを個人的に使用する場合は、問題がない可能性があります。ただし、そのデータを再公開する場合は、同じことを行う前に、所有者にダウンロードリクエストを行うか、スクレイプするデータについてもポリシーに関する背景調査を行う必要があります。
スクレイピングの前に必要な調査
Webサイトからデータを取得することを目的としている場合は、その規模と構造を理解する必要があります。以下は、Webスクレイピングを開始する前に分析する必要のあるファイルの一部です。
robots.txtの分析
実際、ほとんどの発行元は、プログラマーがある程度Webサイトをクロールすることを許可しています。他の意味では、発行者はWebサイトの特定の部分をクロールすることを望んでいます。これを定義するために、Webサイトは、クロールできる部分とクロールできない部分を示すためのいくつかのルールを設定する必要があります。このようなルールは、というファイルで定義されています。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秒間遅延させることを意味します。ザ・/traplinkは、許可されていないリンクをたどる悪意のあるクローラーをブロックしようとします。要件に応じて、Webサイトの発行者が定義できるルールは他にもたくさんあります。それらのいくつかはここで議論されます-
サイトマップファイルの分析
更新された情報を求めてWebサイトをクロールしたい場合は、どうすればよいですか?更新された情報を取得するためにすべてのWebページをクロールしますが、これにより、その特定のWebサイトのサーバートラフィックが増加します。そのため、Webサイトは、すべてのWebページをクロールする必要なしに、クローラーが更新コンテンツを見つけるのに役立つサイトマップファイルを提供します。サイトマップ標準はで定義されています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
上記のコンテンツは、サイトマップにWebサイト上のURLがリストされていることを示しています。さらに、Webマスターは、最終更新日、コンテンツの変更、他のURLとの関係におけるURLの重要性などの追加情報を各URLについて指定できます。
ウェブサイトのサイズはどれくらいですか?
Webサイトのサイズ、つまりWebサイトのWebページの数は、クロールの方法に影響しますか?確かにそうです。クロールするWebページの数が少ない場合、効率は深刻な問題にはなりませんが、Microsoft.comなどのWebサイトに数百万のWebページがある場合、各Webページを順番にダウンロードするには数か月かかります。その場合、効率は深刻な問題になります。
ウェブサイトのサイズを確認する
グーグルのクローラーの結果のサイズをチェックすることにより、ウェブサイトのサイズの見積もりを得ることができます。キーワードを使用して結果をフィルタリングできますsiteグーグル検索をしながら。たとえば、のサイズを見積もるhttps://authoraditiagarwal.com/ 以下に示します-
約60の結果があることがわかります。これは、大きなWebサイトではなく、クロールしても効率の問題が発生しないことを意味します。
ウェブサイトで使用されているテクノロジーはどれですか?
もう1つの重要な質問は、Webサイトで使用されているテクノロジーがクロールの方法に影響を与えるかどうかです。はい、影響します。しかし、Webサイトで使用されているテクノロジーをどのように確認できますか?名前の付いたPythonライブラリがありますbuiltwith 私たちはウェブサイトで使用されている技術について知ることができる助けを借りて。
例
この例では、Webサイトで使用されているテクノロジーを確認します。 https://authoraditiagarwal.com 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
これで、次の簡単なコード行を使用して、特定のWebサイトで使用されているテクノロジーを確認できます。
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
これで、次の簡単なコード行を使用して、特定のWebサイトで使用されているテクノロジーを確認できます。
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]"
],
}