Сеими Краулер
An agile, powerful, standalone, distributed crawler framework.
Цель Сеими Краулера — стать самым полезным краулером на Java.
Сеими Краулер — это быстрый, независимый и распределённый фреймворк для краулеров на Java, который призван снизить порог входа для новичков в создании эффективных и высокопроизводительных краулерных систем, а также повысить эффективность разработки таких систем. В мире Сеими Краулера большинству людей достаточно сосредоточиться на написании логики для извлечения данных, а всё остальное сделает Сеими.
В основе Сеими Краулера лежит идея, вдохновлённая фреймворком Scrapy для Python, с добавлением особенностей языка Java и характеристик Spring. Сеими Краулер использует JsoupXpath (отдельное расширение, не являющееся частью jsoup) в качестве HTML-парсера по умолчанию, который использует XPath для анализа и извлечения данных из HTML. Кроме того, Сеими Краулер полностью решает проблемы с динамической генерацией страниц и их извлечением благодаря интеграции с SeimiAgent.
SeimiAgent, разработанный на основе Qtwebkit и совместимый с основными браузерами (Chrome, Safari и т. д.), может работать на сервере и предоставлять API через HTTP-протокол, что позволяет использовать его с любым языком или фреймворком. SeimiCrawler уже поддерживает использование SeimiAgent в версии v0.3.0 и добавил демонстрационный код (demo).
Доступен плагин maven-seimicrawler-plugin для удобной упаковки и развёртывания проектов на основе SeimiCrawler.
Добавьте зависимость Maven (последняя версия центрального Maven-репозитория 1.3.5):
<dependency>
<groupId>cn.wanghaomiao</groupId>
<artifactId>SeimiCrawler</artifactId>
<version>1.3.5</version>
</dependency>
Создайте класс краулера в пакете crawlers:
@Crawler(name = "basic")
public class Basic extends BaseSeimiCrawler {
@Override
public String[] startUrls() {
return new String[]{"http://www.cnblogs.com/"};
}
@Override
public void start(Response response) {
JXDocument doc = response.document();
try {
List<Object> urls = doc.sel("//a[@class='titlelnk']/@href");
logger.info("{}", urls.size());
for (Object s:urls){
push(new Request(s.toString(),"getTitle"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void getTitle(Response response){
JXDocument doc = response.document();
try {
logger.info("url:{} {}", response.getUrl(), doc.sel("//h1[@class='postTitle']/a/text()|//a[@id='cb_post_title_url']/text()"));
//do something
} catch (Exception e) {
e.printStackTrace();
}
}
}
Затем добавьте основной метод запуска в любом пакете:
public class Boot {
public static void main(String[] args){
Seimi s = new Seimi();
s.start("basic");
}
}
Это самый простой способ создания системы краулинга.
Приведённый выше код удобен для разработки и отладки, но также может быть использован в производственной среде. Однако для упрощения упаковки и развёртывания SeimiCrawler предоставляет специальный плагин, который упаковывает проект.
Добавьте плагин в файл pom:
<plugin>
<groupId>cn.wanghaomiao</groupId>
<artifactId>maven-seimicrawler-plugin</artifactId>
<version>1.2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<!--<configuration>-->
<!-- 默认target目录 -->
<!--<outputDirectory>/some/path</outputDirectory>-->
<!--</configuration>-->
</plugin>
Выполните команду mvn clean package
, чтобы создать упакованный проект. Структура каталога после упаковки выглядит следующим образом:
.
├── bin # 相应的脚本中也有具体启动参数说明介绍,在此不再敖述
│ ├── run.bat #windows下启动脚本
│ └── run.sh #Linux下启动脚文
└── seimi
├── classes #Crawler工程业务类及相关配置文件目录
└── lib #工程依赖包目录
Теперь проект готов к распространению и развёртыванию.
Подробнее см. maven-seimicrawler-plugin.
Для получения дополнительной информации рекомендуется обратиться к примерам в демо-проекте. Более подробные инструкции можно найти на главной странице SeimiCrawler.
Пожалуйста, посетите главную страницу SeimiCrawler для получения более подробной информации. У всех есть вопросы или предложения? Сейчас можно всё это обсудить через список рассылки, который приведён ниже. Прежде чем написать своё первое сообщение, нужно подписаться и дождаться одобрения (в основном это нужно для того, чтобы отфильтровать рекламные объявления и т. п.).
Подписка: отправьте письмо на адрес seimicrawler+subscribe@googlegroups.com
.
Выступление: отправьте письмо по адресу seimicrawler@googlegroups.com
.
Отписка: отправьте письмо на seimicrawler+unsubscribe@googlegroups.com
.
Группа в QQ: 557410934.
Обратите внимание: это возможность свободно общаться с другими участниками.
Здесь будут публиковаться статьи о примерах использования программы, а также новости о последних изменениях в проектах, связанных с системой Seimi.
Пожалуйста, ознакомьтесь с файлом ChangeLog.md.
Кстати: если вам нравится этот проект, добавьте его в избранное на Github. Я не против ^_^.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )