网络爬虫的合法性
通过Python,我们可以抓取任何网站或网页的特定元素,但你知道这是否合法吗?在抓取任何网站之前,我们必须了解网络抓取的合法性。本章将解释与网络抓取的合法性有关的概念。
简介
一般来说,如果你打算将搜刮的数据用于个人用途,那么可能不会有任何问题。但是,如果你打算重新发布这些数据,那么在这样做之前,你应该向所有者提出下载请求,或者对你要搜刮的数据做一些政策方面的背景研究。
搜集前需要进行研究
如果你的目标是一个网站的数据,我们需要了解其规模和结构。以下是我们在开始搜刮网站之前需要分析的一些文件。
分析 robots.txt
事实上,大多数出版商允许程序员在某种程度上抓取他们的网站。在其他意义上,出版商希望网站的特定部分被抓取。为了确定这一点,网站必须制定一些规则,说明哪些部分可以被抓取,哪些部分不能被抓取。这些规则在一个叫做 robots.txt 的文件中定义 。
robots.txt 是人类可读的文件,用于确定允许和不允许爬行者抓取的网站部分。robots.txt文件没有标准格式,网站的发布者可以根据自己的需要进行修改。我们可以通过在某个网站的网址后面提供一个斜线和 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文件中定义的一些最常见的规则如下– 1.
User-agent: BadCrawler
Disallow: /
上述规则意味着robots.txt文件要求带有 BadCrawler 用户代理的爬虫不要抓取其网站。
User-agent: *
Crawl-delay: 5
Disallow: /trap
上述规则意味着robots.txt文件将爬虫在所有用户代理的下载请求之间延迟5秒钟,以避免服务器过载。 /trap 链接将试图阻止跟踪不允许的链接的恶意爬虫。还有许多规则可以由网站的发布者根据他们的要求来定义。这里讨论了其中的一些规则–
分析网站地图文件
如果你想抓取一个网站的最新信息,你应该怎么做?你会抓取每一个网页来获取更新的信息,但这将增加该网站的服务器流量。这就是为什么网站要提供网站地图文件,以帮助爬虫定位更新的内容,而不需要抓取每个网页。网站地图的标准是在http://www.sitemaps.org/protocol.html。
网站sitemap文件的内容
以下是在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的重要性等。
什么是网站的规模
网站的大小,即网站的网页数量是否会影响我们的抓取方式?当然是的。因为如果我们要抓取的网页数量较少,那么效率就不是一个严重的问题,但假设我们的网站有数百万个网页,例如Microsoft.com,那么按顺序下载每个网页将需要几个月的时间,那么效率就会成为一个严重的问题。
检查网站的大小
通过检查谷歌爬虫的结果的大小,我们可以对网站的大小有一个估计。我们的结果可以通过在进行谷歌搜索时使用关键词 网站 来进行过滤。例如,估计https://authoraditiagarwal.com/ 的大小,如下所示
你可以看到大约有60个结果,这意味着它不是一个大网站,抓取不会导致效率问题。
网站使用的是什么技术
另一个重要问题是,网站使用的技术是否会影响我们的抓取方式?是的,会影响。但是,我们如何才能检查一个网站所使用的技术呢?有一个名为 buildwith 的Python库,在它的帮助下,我们可以查到网站使用的技术。
例子
在这个例子中,我们将在Python库 buildwith 的帮助下检查网站所使用的技术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"
],
}