2011-01-03 2 views
3

Мне нужно очистить около 100 сайтов, которые очень похожи в содержимом, которое они предоставляют.Методы Webscraping с использованием PHP или Python

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

Второй вопрос. Мой основной язык - это PHP, но после поиска здесь в Stackoverflow я обнаружил, что одним из самых современных скребок является «Beautiful Soup» в Python. Должны ли быть возможными вызовы на PHP в «Beautiful Soup» в Python? Или должно быть лучше сделать весь скрипт в Python?

Дайте мне некоторые подсказки о том, как мне идти.

Извините за слабый английский.

С наилучшими пожеланиями,

+0

Python not Phyton – Unode

+0

Python будет отличным дополнением к вашему поясу инструмента, может даже улучшить способ написания PHP. Если скрипт будет работать от crontab, Python - хороший выбор - также посмотрите на SqlSoup для доступа к базе данных. –

+1

Вы имеете в виду «BeautifulSoup» в своем посте, я подозреваю, что не «Красивое мыло», –

ответ

2

1.) Один скребок для 100 сайтов? Это зависит от ваших требований. Если вам нужна только конкретная информация, вам нужно будет рассмотреть 100 разных сайтов и их макеты. Однако некоторые общие функции могут быть разделены.

2.) BeautifulSoup - это синтаксический анализатор HTML/XML, а не скребок экрана как таковой. Это было бы лучшим выбором для задачи, если скребок был бы написан на питоне. Вызов python из php можно сделать, но это, конечно, не так просто, как одноязычное решение. Вот почему я предлагаю вам заглянуть в python и BeautifulSoup ради прототипа.

Sidenote: http://scrapy.org/ еще одна библиотека питон, специально разработанный

ползать сайты и извлечения структурированных данных из их страниц.

2

Поскольку я предпочитаю PHP, а не Python, я однажды использовал phpQuery для очистки данных с веб-сайтов. Он работает очень хорошо, и я быстро придумал scaper, используя селектор CSS (с помощью SelectorGadget), чтобы выбрать элементы и получить его ->text().

Но я обнаружил, что это немного медленнее (поскольку мне пришлось царапать тысячи страниц), поэтому в конце я изменил его, чтобы использовать регулярное выражение для очистки данных. D:

0

Я сделал это несколькими способами.

1: с grep, sed и awk. Это примерно такое же, как 2: regex. Эти методы очень прямые, но сбой при изменении структуры HTML-сайта.

3: XML-парсер PHP/DomDocument. Это гораздо надежнее, чем регулярное выражение, но мне было очень неприятно работать (я ненавижу смесь массивов и объектов PHP). Если вы хотите использовать PHP, PHPQuery, вероятно, является хорошим решением, как предполагал тайский.

4: Python и BeautifulSoup. Я не могу сказать достаточно хороших вещей о BeautifulSoup, и это тот метод, который я рекомендую. Я обнаружил, что мой код чувствует себя чище на Python, и BeautifulSoup был очень легким и эффективным для работы. Хорошая документация тоже.

Вам нужно будет специализировать свой скрипт для каждого сайта. Это зависит от того, какую информацию вы хотите извлечь.Если бы это было что-то стандартное, как body title, конечно, вам не нужно было ничего менять, но, скорее всего, информация, которую вы хотите, более конкретна?

0

Мы делаем что-то вроде этого с помощью RSS-каналов с использованием Python - мы используем ElementTree, так как RSS, как правило, гарантированно хорошо сформирован. Красивый суп, вероятно, лучше подходит для разбора HTML.

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

Скребки, как правило, связаны с вводом-выводом - посмотрите на библиотеки сопрограммы, такие как eventlet или gevent, чтобы использовать некоторый параллелизм ввода-вывода и ускорить весь процесс.

Смежные вопросы