Язык / библиотеки для загрузки и анализа веб-страниц? - PullRequest
20 голосов
/ 04 марта 2010

Какой язык и библиотеки подходят для скрипта для анализа и загрузки небольшого количества веб-ресурсов?

Например, некоторые веб-сайты публикуют псевдоподкасты, но не в виде надлежащих RSS-каналов; они просто регулярно публикуют файл MP3 с веб-страницей, содержащей список воспроизведения. Я хочу написать скрипт для регулярного запуска и проанализировать соответствующие страницы для ссылки и информации о плейлисте, загрузить MP3 и поместить плейлист в теги MP3, чтобы он хорошо отображался на моем iPod. Есть множество похожих приложений, которые я тоже мог написать.

Какой язык вы бы порекомендовали? Я хотел бы, чтобы скрипт работал на Windows и MacOS. Вот несколько альтернатив:

  • JavaScript . Просто чтобы я мог использовать jQuery для разбора. Я не знаю, работает ли jQuery вне браузера.
  • Python . Вероятно, хорошая поддержка библиотеки для того, что я хочу. Но я не люблю синтаксис Python.
  • рубин . Раньше я делал простые вещи (ручной анализ) в Ruby.
  • Clojure . Потому что я хочу провести с ним немного времени.

Какой ваш любимый язык и библиотеки для этого? И почему? Есть ли какие-нибудь хорошие jQuery-подобные библиотеки для других языков?

Ответы [ 10 ]

7 голосов
/ 04 марта 2010

Если вы хотите провести некоторое время с Clojure (очень хорошая идея, IMO!), Дайте Enlive шанс. Описание GitHub гласит

система шаблонов и преобразований на основе селектора (в стиле CSS) для Clojure - Подробнее

В дополнение к тому, что он полезен для создания шаблонов, он способен создавать веб-библиотеки; см. начальную часть этого урока для нескольких простых примеров. (Третий - домашняя страница New York Times, так что на самом деле не все так просто.)

В Интернете доступны другие учебные пособия, если вы их ищете; Сам Enlive поставляется с некоторыми документами / примерами. (Плюс код <1000 строк в общем и очень удобочитаемый, хотя я полагаю, что это может быть меньше для новичка в этом языке.) </p>

6 голосов
/ 06 марта 2010

Clojure дампы ссылок, охватывающие живое, основанные на tagSoup и агентах для параллельных загрузок (обзоры / дампы ссылок не очень приятные, но я потратил некоторое время на поиск / поиск различных библиотек. Spidering / crawling может быть очень простым или приятным участвует в зависимости от структуры просканированных сайтов, HTML, XHTML и т. д.)

http://blog.bestinclass.dk/index.php/2009/10/functional-social-webscraping/

http://nakkaya.com/2009/12/17/mashups-using-clojure/

http://freegeek.in/blog/2009/10/downloading-a-bunch-of-files-in-parallel-using-clojure-agents/

http://blog.maryrosecook.com/post/46601664/Writing-an-mp3-crawler-in-Clojure


http://gnuvince.wordpress.com/2008/11/18/fetching-web-comics-with-clojure-part-2/

http://htmlparser.sourceforge.net/

http://nakkaya.com/2009/11/23/converting-html-to-compojure-dsl/

http://www.bestinclass.dk/index.php/2009/10/functional-social-webscraping/


HTTP-клиент Apache

http://github.com/rnewman/clj-apache-http

http://github.com/heyZeus/clj-web-crawler

http://japhr.blogspot.com/2009/01/clojure-http-clientclj.html

5 голосов
/ 04 марта 2010

Beautiful Soup (http://www.crummy.com/software/BeautifulSoup/) - хорошая библиотека для Python для этого. Она специализируется на работе с искаженной разметкой.

4 голосов
/ 04 марта 2010

В ruby ​​у вас также есть Nokogiri, Nokogiri (鋸) - анализатор HTML, XML, SAX и Reader. Среди многих функций Nokogiri - возможность поиска документов с помощью селекторов XPath или CSS3.

2 голосов
/ 04 марта 2010

Как уже упоминал Микаэль С. hpricot - отличный ruby-анализатор HTML. Однако для извлечения страниц вы можете использовать библиотеку очистки экрана, например scRUBYt или Mechanize .

1 голос
/ 20 сентября 2013

Вы должны действительно дать Python выстрел.

Когда я решаю спроектировать гусеничный механизм, я обычно воспроизводлю тот же шаблон .

Для каждого шага есть работник, который выбирает данные из контейнера (в основном из очереди). Существует контейнер между каждым типом работника. После первого подключения целевого сайта, все типы рабочих могут быть нарезаны. Поэтому мы должны использовать синхронизацию для доступа к этим очередям.

  1. Соединитель: Сеанс Объект из библиотеки запросов замечательный.
  2. Загрузчик: с несколькими нитями Загрузчики, несколько запросов могут быть запущены в кратчайшие сроки.
  3. Parser: xpath интенсивно используется на каждом etree объекте, созданном с lxml .
  4. Валидатор: набор утверждений и эвристик для проверки достоверности проанализированных данных.
  5. Архиватор: в зависимости от того, что хранится, сколько и как быстро, но nosql часто является самым простым способом хранения извлеченных данных. Например, mongodb и pymongo .
1 голос
/ 04 марта 2010

Я настоятельно рекомендую использовать Ruby и библиотеку hpricot .

0 голосов
/ 05 марта 2010

Для jQuery-подобной библиотеки селекторов CSS в Perl, взгляните на pQuery

Также взгляните на этот предыдущий вопрос SO, где приведены примеры разбора и анализа HTML-кода на многих языках.

/ I3az /

0 голосов
/ 04 марта 2010

Что вы действительно хотите сделать? Если вы хотите выучить Clojure || ruby ​​|| C, сделайте это. Если вы просто хотите сделать это, делайте все, что быстрее для вас. И, по крайней мере, когда вы говорите Clojure и библиотека, вы также говорите о Java и библиотеке, их много, и некоторые из них очень хороши (хотя я не знаю, что это такое). То же самое было сказано выше для ruby ​​и python. Так что ты хочешь сделать?

0 голосов
/ 04 марта 2010

Я бы, наверное, сделал это с PHP, curl, & phpQuery .. но есть много разных способов ..

...