Законность парсинга веб-сайтов
С помощью Python мы можем очищать любой веб-сайт или отдельные элементы веб-страницы, но знаете ли вы, законно это или нет? Прежде чем выполнять парсинг любого веб-сайта, мы должны узнать о законности парсинга. В этой главе будут объяснены концепции, относящиеся к законности очистки веб-страниц.
Введение
Как правило, если вы собираетесь использовать очищенные данные в личных целях, проблем может не быть. Но если вы собираетесь переиздать эти данные, то перед тем, как сделать то же самое, вам следует сделать запрос на загрузку владельцу или провести небольшое исследование политик, а также данных, которые вы собираетесь очистить.
Перед очисткой требуется исследование
Если вы нацеливаетесь на веб-сайт для извлечения с него данных, нам необходимо понимать его масштаб и структуру. Ниже приведены некоторые файлы, которые нам необходимо проанализировать, прежде чем начинать парсинг веб-страниц.
Анализируем robots.txt
На самом деле большинство издателей позволяют программистам в той или иной степени сканировать свои веб-сайты. С другой стороны, издатели хотят, чтобы сканировались определенные части веб-сайтов. Чтобы определить это, веб-сайты должны установить некоторые правила, определяющие, какие части можно сканировать, а какие нет. Такие правила определены в файле с именемrobots.txt.
robots.txt- это удобочитаемый файл, используемый для определения частей веб-сайта, которые сканеры могут или не могут сканировать. Не существует стандартного формата файла robots.txt, и издатели веб-сайта могут вносить изменения в соответствии со своими потребностями. Мы можем проверить файл robots.txt для конкретного веб-сайта, указав косую черту и robots.txt после URL-адреса этого веб-сайта. Например, если мы хотим проверить его на 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 будет пытаться заблокировать вредоносных поисковых роботов, которые переходят по запрещенным ссылкам. Есть еще много правил, которые могут быть определены издателем веб-сайта в соответствии со своими требованиями. Некоторые из них обсуждаются здесь -
Анализ файлов Sitemap
Что вы должны делать, если хотите сканировать веб-сайт в поисках обновленной информации? Вы будете сканировать каждую веб-страницу для получения этой обновленной информации, но это увеличит трафик сервера этого конкретного веб-сайта. Вот почему веб-сайты предоставляют файлы карты сайта, чтобы помочь сканерам найти обновленный контент без необходимости сканировать каждую веб-страницу. Стандарт Sitemap определен наhttp://www.sitemaps.org/protocol.html.
Содержание файла Sitemap
Ниже приводится содержимое файла карты сайта 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-адресе.
Какой размер веб-сайта?
Влияет ли размер веб-сайта, т. Е. Количество веб-страниц на то, как мы сканируем? Конечно да. Потому что, если у нас будет меньшее количество веб-страниц для сканирования, эффективность не будет серьезной проблемой, но предположим, что если наш веб-сайт имеет миллионы веб-страниц, например Microsoft.com, то последовательная загрузка каждой веб-страницы займет несколько месяцев и тогда эффективность будет серьезной проблемой.
Проверка размера веб-сайта
Проверяя размер результатов поискового робота Google, мы можем оценить размер веб-сайта. Наш результат можно отфильтровать с помощью ключевого словаsiteпри поиске в Google. Например, оценивая размерhttps://authoraditiagarwal.com/ приведено ниже -
Вы можете увидеть, что есть около 60 результатов, что означает, что это небольшой веб-сайт, и сканирование не приведет к снижению эффективности.
Какая технология используется на сайте?
Еще один важный вопрос: влияет ли технология, используемая на веб-сайте, на способ сканирования? Да, влияет. Но как мы можем проверить технологию, используемую веб-сайтом? Существует библиотека Python с именемbuiltwith с помощью которых мы можем узнать о технологиях, используемых на веб-сайте.
пример
В этом примере мы собираемся проверить технологию, используемую на сайте. 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": [
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]"
],
}