Crawling и scraping
Хотя два слова crawling и scraping обычно взаимозаменяемы - по крайней мере, когда мы говорим о веб - они могут иметь слегка различающиеся значения. Crawling обычно подразумевает переход от страницы к странице, перемещаясь между сайтами. Scraping в свою очередь обычно подразумеваем анализ одной или очень ограниченного набора страниц.
Хотя, может быть, я просто выдумал это различие. Кто знает, что другие имеют в виду под этими словами?
Боты, Роботы, Веб-пауки, как правило, относятся к программам, которые реализуют crawling или scraping
Задачи
Самая простая задача это скачать заданный URL.
Затем, если нам вернулась HTML страница, мы можем:
Скачать картинки.
Скачать конкретные файлы. (Изображения это одна из возможностей, но возможно, вы бы хотели скачать все JavaScript файлы или все видео, или ...)
Встречающиеся проблемы
Исключение Есть части веб-сайта, которые вы не хотите обходить. Либо потому что вам не интересно, или потому что вы хотите быть хорошим посетителем и соблюдать описанное в файле robots.txt. robots.txt это файл, описывающий предпочтения владельца сайта относительно того, какие роботы могут посещать какие области сайта.
Глубина - на какое количество кликов от стартовой страницы вы хотите погрузиться?
Одновременная загрузка - с одной строны, скачивание страниц одной за другой может занять много времени. С другой стороны, скачивание 100 страниц одновременно может привести к ваше блокировке на сайте. Вам нужно найти верный баланс.
Пауза между страницами для облегчения нагрузки, что мы генерируем на сервере - мы можем захотеть сделать паузу между скачиванием страниц с одного и того же сервера.
Стартовые страницы Какой-то способ описать больше одной стартовой страницы.
Циклы Избежание повторяющихся загрузок одних и тех же страниц.
Условия использования некоторые веб-сайты могут иметь официальные документы, описывающие, что вы уполномочены скачивать и что вы можете с этим потом делать. К примеру, показ аналогичного контента на другом сайте, как это было на оригинальном сайте, обычно не то, что вам стоит делать.
Обработка JavaScript на веб-сайте.
Обработка параметров в URL. http://examples.org/ http://examples.org/?id=42 Это одна и та же страница? Когда мы встретим вторую, нам нужно удалить параметры после "?"?
Обработка кнопок. Нужно ли нам обходить нажатия по кнопкам или только по ссылкам?
Обработка форм. Должен ли наш обходчик заполнять формы и нажимать на кнопки? Какие значения он должен заполнить?
Кросс-ссылки: Когда мы хотим обойти один или несколько конкретных сайтов, мы должны быть уверены, что ссылки не ведут на внешние ресурсы. С другой стороны мы бы хотели разрешить переходить по ссылками между сайтами из предопределенного списка URL.
С www или без wwww. Все еще есть сайты, которые предоставляют один и тот же контент с обоих сайтов www.example.com и example.com вместо редиректов с одного на другой. Мы должны решить, рассматривать это как два разных сайта, или мы бы хотели обойти только один из них. Что делать, если будут ссылки с одного на другой? Должны ли мы заменить один URL другим, делая вид, что там на самом деле редирект? Другими словами, если мы решили проиндексировать example.com, но там есть ссылка на http://www.example.com/abc стоит ли пробовать скачать http://example.com/abc вместо этого?
Инструменты
JavaScript / NodeJS
- http (посмотрите, как сделать crawler на NodeJS)
- node-crawler
- node-jsdom
- node-crawler-cheerio
- PhantomJS
Python
Perl 5
- LWP::Simple
- LWP::UserAgent
- WWW::Mechanize
- WWW::Spyder
- WWW::Crawler::Lite
- WWW::Crawler::Mojo
- Web::Query
- Mojo::UserAgent и mojo-crawler and yada-crawler
- Scrappy
- Web::Scraper
- Web scraping with HTML::TreeBuilder
- A Simple way to download many web pages using Perl: LWP::Simple and HTTP::Tiny
- Fetching several web pages in parallel using AnyEvent
Ruby
Альтернатива: Common Crawl
Книги
Другое
- Scraping Hub is scraping as a service.
- DeepCrawl
Published on 2016-02-23