http://vscrawler.virjar.com/ http://vscrawler.scumall.com/ Адрес онлайн тестирования
<dependency>
<groupId>com.virjar</groupId>
<artifactId>vscrawler-core</artifactId>
<version>0.2.6</version>
</dependency>
569543649 (VS серия единого общения, включает проекты DungProxy, VSCrawler, SipSoup)### История
0.0.x - Определение базовой структуры VS
0.1.x - Полное проектирование процесса извлечения данных, включая XPath, цепочное извлечение, набор функций строковых операций, локализацию таблицы данных
0.2.0 - Поддержка запуска нескольких экземпляров пауков (isolation контекста)
0.2.1 - Поддержка аннотированного паука
0.2.2 - Полное проектирование управления очередью ресурсов пауков, включающее распределение, блокировку, разблокировку, изолированное распределение между машинами, используется для управления аккаунтами, номерами устройств, токенами и другими повторно используемыми ресурсами
0.2.3-6 - Синхронизация интерфейса захвата, различные оптимизации времени ожидания (синхронная система захвата требует реального времени), с этого момента VSCrawler получил инженерное подтверждение как для офлайн, так и для онлайн захвата
0.3.x - Реализация веб-конечной точки, кроме обычного контроля запуска и остановки пауков, также предоставляет возможность горячего замены кода пауков, а также упаковывает захват в RESTful API## Уникальные возможности
Взаимоприсоединяемость сессий, полная изоляция множества пользователей (в настоящее время большинство других фреймворков не могут решать проблему одновременного входа в систему нескольких аккаунтов, они могут использовать только один cookie). Взаимоприсоединяемость сессий vscrawler обеспечивает изоляцию TCP соединений и их повторное использование.
Возможность расширения через плагины, vscrawler предлагает множество точек расширения, даже сам vscrawler основан на модульном подходе с использованием плагинов. При этом использование плагинов vscrawler очень удобно, vscrawler использует собственный EventBus для создания мини-RPC, подключение плагинов происходит так же просто, как вызов обычного метода Java (почувствуйте себя Dubbo, одно-процесс RPC может быть более приятным при передаче параметров, чем Dubbo).
XPath, vscrawler использует собственную реализацию XPath, которая не использует никаких сторонних библиотек. Она идеально сочетается с vscrawler. На данный момент только два Java фреймворка для парсинга страниц — WebMagic и SimCrawler — имеют свои собственные реализации XPath. Однако XPath vscrawler (SipSoup) превосходит их всех. SipSoup был создан после исследования их модулей XPath.Пожалуйста, обратите внимание, что все имена переменных, функций, классов и другие элементы кода остались без изменения согласно правилам перевода. SipSoup позволяет вставлять правила CSSQuery внутрь синтаксиса XPath, что очень удобно.4. Цепочечное извлечение, Хуанг Да Да сказал, что цепочечное извлечение заставляет его чувствовать, будто код написан с магическими свойствами. Я тоже так считаю. Функционал цепочечного извлечения в VSCrawler более магичен, чем в WebMagic. Это связано с тем, что цепочечное извлечение в WebMagic имеет два недостатка: (1) контекст теряет свои данные между звеньями цепочки; (2) невозможно создать цепочечное извлечение для гетерогенных данных.
Прокси, честно говоря, количество кода, которое встроено в VSCrawler через DungProxy, превышает объем кода самого WebMagic. DungProxy был спроектирован мной уже со второго курса университета, а после начала работы примерно через полгода появились первые пользователи, на это ушло около полутора лет. Внутри него реализовано множество алгоритмических моделей. Я уверен, что теория управления прокси, которую мы используем, намного лучше любой системы сканирования или сбора прокси, доступной на рынке (если кто-то начнет рассказывать мне о своей системе сканирования прокси, я обычно не слушаю дальше, потому что эти концепции можно найти на любом сайте, они совершенно лишены новизны).6. Загрузка данных, большинство существующих фреймворков для пауков слишком строго ограничивают процесс загрузки данных, и эта "обёртка" часто бессмысленна. Вы говорите, что фреймворк поддерживает POST и AJAX-запросы. Но это же любая библиотека для сетевых запросов может поддерживать, верно? Обсуждать такие вещи, как POST, обычно означает, что реальные сценарии запросов становятся сложнее, а ограниченное количество открытых интерфейсов фреймворка вынуждает программиста писать много логики самостоятельно. Так что не было бы ничего плохого, если бы этого вообще не было.7. Возобновление с места прерывания, попробовали ли вы возобновлять работу паука без использования Redis? Думаю, многие студенты-магистранты или выпускники бакалавриата имеют потребность в сборе данных, но им может просто не хватить ресурсов для установки Redis. Попробуйте vscrawler, он работает быстрее Redis. Я не верю, что в наши дни невозможно обойтись без Redis?
Очередь ресурсов, vscrawler перенёс ключевые алгоритмы управления порядком прокси из dungproxy в модуль resourceManager. Этот модуль обеспечивает идеальное управление ресурсами, позволяющее эффективно работать даже при возможных проблемах с входом в аккаунты, временным баном или сетевыми ошибками. Эта модель покрывает все случаи, чтобы избежать неразумных стратегий, которые могли бы привести к блокировке или некорректному использованию данных.9. Аннотированные пауки, SimCrawler и WebMagic предлагают аннотированные пауки, которые очень удобны в использовании. Поэтому в VSCrawler также должны быть аннотированные пауки, которые будут мощнее их. Я обязательно изучил их код перед тем, как написать свой, ведь стою на плечах гигантов. Аннотированные пауки в VSCrawler предоставляют возможности типа преобразования типов, циклического внедрения и цепочечного объединения правил (цепочка в WebMagic не может использоваться в аннотациях главным образом из-за потери контекста, что приводит к странным проблемам при извлечении данных). Ниже мы будем использовать Jsoup, и при работе с фрагментами HTML могут возникнуть проблемы из-за функции автодополнения кода в Jsoup.10. Онлайн-захват: vscrawler может отказаться от способностей планировщика задач и просто вывести интерфейсы захвата данных. В настоящее время эта функция уже интегрирована с веб-проектом, что привело к выводу HTTP-интерфейсов. При этом онлайн- и оффлайн-режимы могут существовать одновременно (коллега попросил выполнить оффлайн-захват некоторого количества данных, а затем через несколько дней потребовал сделать это как сервис, предоставляемый через онлайн-интерфейс. Однако для vscrawler переход между этими режимами не требует дополнительной работы).11. Живое обновление кода, которое я видел во многих системах управления паравыми, использующими WebMagic, поддерживающими различные паравые-фреймворки или созданных самостоятельно. Цели таких систем обычно следующие: а) мониторинг состояния захвата; б) управление запуском и остановкой паравых; в) использование XML-конфигураций для установки правил паравых. Возможно, самой важной является третья цель, которая часто является уникальной чертой многих фреймворков. Но честно говоря, способность XML описать сложные конфигурации недостаточна, чтобы противостоять стратегиям защиты сайтов от паравых. Поэтому я всегда думал, как должна работать конфигурация VSCrawler в такой ситуации. Моя идея заключается в том, что такие конфигурации должны быть программно настраиваемыми, если бы мои конфигурации были кодом, то можно было бы делать всё что угодно. Таким образом, я реализовал возможность загрузки JAR-пакета для замены паравого. Это значит, что живое обновление конфигурации VSCrawler осуществляется путём изменения Java-кода. Кроме того, Gecco — ещё один паравый фреймворк, который заявляет о поддержке живого обновления, но его реализация кажется мне незавершённой. Во-первых, регистрация динамических bean происходит глобально, что делает невозможным разделение нескольких правил паравых.Во-первых, живое обновление осуществляется путём создания байт-кодов, используя некоторые API Java для создания классов; однако до настоящего времени нет возможности для конфигурации этого процесса. Даже если базовый уровень поддерживает живое обновление, поскольку точка обновления жёстко закодирована в Java, невозможно обеспечить обновление без перезапуска системы. Самым важным моментом является то, что данное решение живого обновления основано на использовании Javassist для генерации классов, соответствующих интерфейсу фреймворка. Я считаю, что это не обязательно, так как хорошее абстрактное представление позволяет создать набор обработчиков правил внутри самого фреймворка, что гарантирует лучшую расширяемость. Обычно считается, что генерация байт-кодов используется для снижения использования динамического кода и рефлексии, увеличивая производительность кода. Фреймворки типа Spring AOP, FastJSON, Orika используют эту технику для повышения производительности. Однако Gecco не использует эту технику с целью повышения производительности.## Недоступно Есть области, где vscrawler пока не завершён и требует доработки. Если вы рассчитываете на наличие определённой функциональности в vscrawler, а она ещё не реализована, исследование vscrawler может стать бесполезным затратом вашего времени.
На данный момент vscrawler всё ещё не поддерживает распределённые системы. Конечно, онлайн-захват может поддерживать многомашинную среду. Vscrawler, если сам будет планировать задачи для сбора данных, то пока ещё нет чёткого представления о том, как организовать работу с несколькими машинами.
На основе XML-конфигураций создание пауков — это обязательно будет реализовано, возможно сразу после того, как текущий веб-интерфейс станет стабильным.
Пауки на основе скриптов Groovy — такие скрипты могут стать наиболее удобной точкой расширения.
Мониторинг — мониторинг действительно является сложным модулем, JMX не буду использовать, чтобы сделать его идеальным, но уверен, что это можно сделать хорошо.
Вопрос: Моё веб-приложение требует прокрутки страницы, чтобы видеть данные. Как мне их получить?
Ответ: Vscrawler вам не подходит.
Вопрос: Я скачал HTML-страницу, но не нашёл там данных, хотя они есть в браузере. Почему так происходит?
Ответ: Не знаю, но использование vscrawler вам не подходит.### Живой перезапуск Живой перезапуск позволяет фреймворку заменять одного паука другим без перезапуска системы. Это решение было выбрано потому, что Vscrawler выполняет всё больше онлайн-задач по сбору данных. Из-за увеличивающегося количества пауков, каждый раз при изменении одного из них требуется перезапуск всей машины, что может временно вывести её из строя и привести к снижению производительности всей системы, а также вызвать эффект "эффекта домино".
Многие компании предпочитают не использовать фреймворки для создания пауков, главным образом из-за необходимости онлайн-сбора данных. Фреймворк для пауков не должен планировать задачи сбора данных (это делается на более высоком уровне), система на более высоком уровне должна обнаруживать устаревшие данные и запрашивать свежую информацию, решать вопросы популярности задач, определять приоритеты задач, реагировать на действия пользователя для обеспечения актуальности данных, а также выполнять повторное использование семян для минимизации дублирования данных.
Vscrawler поддерживает отказ от управления задачами сбора данных и предоставляет интерфейсы для онлайн-сбора данных, обеспечивая управление ресурсами (IP, аккаунты, номера устройств, повторное использование сессий, повторное использование TCP-соединений), парсинг данных и другие операции.
<dependency>
<groupId>com.virjar</groupId>
<artifactId>vscrawler-web-api</artifactId>
<version>${parent.version}</version>
<!-- Обратите внимание, scope должен быть provided -->
<scope>provided</scope>
</dependency>
Другие зависимости также могут быть импортированы. 2. Настройте pom.xml, добавьте следующий код build.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
...
</plugin>
com.virjar.vscrawler.web.api.CrawlerBuilder
/**
* Created by virjar on February 3, 2018.<br>
* This is a simple crawler class that can be built into a JAR file using Maven and then uploaded to the vscrawler web platform where vscrawler-web will perform hot loading of this JAR file.
*/
public class SampleHotCrawler implements CrawlerBuilder {
@Override
public VSCrawler build() {
return VSCrawlerBuilder.create()
.setProcessor(AnnotationProcessorBuilder.create()
.registryBean(GitEEProject.class)
.build())
.setStopWhileTaskEmptyDuration(-1)
.setCrawlerName("giteeProjectCrawler")
.build();
}
}
mvn clean package
.WEB-INF/vscrawler_hot_jar/
вашего веб-проекта или используйте веб-страницу для онлайн-загрузки.com.virjar.vscrawler.web.api.SpringContextAware
. Если ваш класс входной точки для пауков реализует этот интерфейс, то при загрузке вашего jar-пакета в рамках работы фреймворка через данный интерфейс будет внедрен контекст Spring. Вы сможете использовать его для выполнения различных действий (например, получение бинов, обновление определений бинов или создание подконтекста аналогично Spring MVC). Конечно, ручное получение бинов выглядит довольно примитивно, поэтому если поля классов внутри jar-пакета помечены аннотациями Resource
или Autowired
, то фреймворк попробует автоматически внедрять зависимости с использованием бинов из контекста Spring.Внедрение поддерживается только по типу (если есть несколько бинов одного типа, это может вызвать проблемы, так как обычно мы используем тип для внедрения зависимостей).В общем, jar-пакет сможет получить доступ к бинам Spring из веб-проекта, но классы внутри jar-пакета не смогут влиять на контекст Spring веб-проекта. Веб-проект и jar-пакет находятся в односторонней зависимости.На данный момент я создал репозиторий пауков, где планируется реализация различных пауков на основе vscrawler. Проект является maven-проектом, каждый модуль представляет собой отдельного паука, который можно скомпилировать в jar-пакет и запустить на платформе vscrawler-web. Разумеется, приветствуется участие других студентов в поддержании этого репозитория. Адрес репозитория: Репозиторий пауков на основе vscrawler
Фронтенд был создан с использованием Vue. Учитывая, что не все Java-разработчики имеют среду Node.js, чтобы упростить сборку всего проекта, фронтенд был вынесен в отдельный проект (если бы он был здесь, npm-зависимости могли бы вызвать проблемы компиляции серверной части).
Адрес фронтенд-проекта: https://gitee.com/virjar/vscrawler-frontend Для заинтересованных студентов доступна возможность самостоятельной сборки.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )