使用Python,无涯教程可以抓取任何网站或网页的特定元素,在抓取任何网站之前必须了解网络抓取的合法性。本章将解释与网络抓取合法性概念。
通常,如果您打算将抓取的数据用于个人用途,则可能没有任何问题,但是,如果要重新发布该数据,则在进行同样的操作之前,应向所有者提出下载请求,或者对要爬取的数据以及策略进行一些背景研究。
实际上,大多数发布者都允许程序员在一定程度上爬网其网站。换句话说,发布者希望对网站的特定部分进行爬网。要对此进行定义,网站必须制定一些规则,以说明可以爬网的部分和不能爬网的部分,这些规则在名为 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文件中定义的一些最常见的规则如下-
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/的大小-
您会看到大约60个链接,这意味着它不是一个大网站,并且抓取不会导致效率问题。
另一个重要的问题是网站使用的技术是否会影响爬网方式?是的,它会影响。但是,如何检查网站使用的技术?有一个名为 builtwith 的Python库,借助它可以找到有关网站使用的技术的信息。
在此示例中,将检查网站 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
现在,借助以下简单的代码行,可以检查特定网站使用的技术-
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 的协议,借助它无涯教程可以查找有关网站所有者的信息。
在此示例中,将检查网站所有者,说 microsoft.com 在Whois的帮助下。但是在使用此库之前,需要按以下方式安装它-
(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" ], }
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)