1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/backwxc-vw-crawler

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

VW-Crawler

Фон

Я всегда интересовался краулерами, и моя дипломная работа в университете была проектом по краулеру (краулер для сбора информации из учебного отдела, а затем создание системы управления учебным отделом для Android, которая также получила награду за выдающийся дипломный проект). С тех пор, как я сталкиваюсь с веб-сайтами, которые меня интересуют, я пытаюсь их сканировать. Недавно на работе мне понадобилась информация о JD, поэтому я нашел открытый исходный код краулера WebMagic, который прост в использовании, легко настраивается и имеет мощные функции, хотя некоторые данные сайтов не подходят для использования. За последние несколько лет я написал более десятка краулеров, и постепенно у меня появилась идея абстрагировать код этих краулеров и создать простой краулерный фреймворк. Поэтому в конце 2017 года я начал разработку, но она прерывалась и возобновлялась. Только в августе этого года я выпустил версию, а затем успешно разместил её в публичном репозитории Maven. Один человек не может сделать всё, и для того, чтобы улучшить надёжность, удобство использования и расширяемость этого краулера, нужна помощь других!

Обновление от 20 августа 2019 года: в течение последних 12 месяцев данные о загрузках и использовании.

Особенности

  • Язык: Java-разработка, относительно простой фреймворк, во многих местах используется программирование на основе интерфейсов, что является хорошим примером для изучения Java.
  • Сложность: Очень простая, после настройки, написания логики анализа и организации метода сохранения, всё готово.
  • Лёгкость: использует Jsoup в качестве загрузчика по умолчанию, с низкой зависимостью.
  • Потоки: можно самостоятельно устанавливать количество потоков для сканирования, повышая эффективность сканирования.
  • Повторные попытки: поддерживает повторные попытки при сбоях, количество попыток можно настроить.
  • Прокси: поддерживает настройку пула прокси, по умолчанию использует случайные IP-адреса прокси, также можно настроить алгоритм получения.
  • Дедупликация: двойная дедупликация, по умолчанию дедуплицирует URL, также можно определить вторую логику дедупликации.
  • Контроль: можно самостоятельно контролировать, нужно ли анализировать страницу, уменьшая использование ресурсов.
  • Точность: можно точно анализировать каждый URL, устанавливая регулярные выражения для URL.
  • Расширяемость: почти каждый этап можно настроить.

Использование

Использование Maven

На http://search.maven.org используйте последнюю версию. В pom.xml добавьте зависимость:

<dependency>
    <groupId>com.github.vector4wang</groupId>
    <artifactId>vw-crawler</artifactId>
    <version>${last.version}</version>
</dependency>

Автономное использование

Можно загрузить последнюю версию jar с главной страницы проекта release, а затем импортировать в свой собственный проект.

Шаги

  • Настройка параметров.
  • Абстракция регулярных выражений.
  • Анализ страниц.
  • Сохранение данных.

Каждый этап поддерживает настройку.

Пример

Скачивание контента блога определённого пользователя CSDN

Настройка основных параметров краулера, таких как User-Agent, начальный адрес, регулярное выражение целевого URL страницы, количество потоков и время ожидания и т. д.

new VWCrawler.Builder()
        // 配置参数
        .setHeader("User-Agent",
                "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36") // 设置请求头
        .setUrl("https://blog.csdn.net/qqhjqs") // 设置爬虫起始地址
        .setThreadCount(10) // 设置几个线程抓取数据
        .setTimeOut(5000) // 设置超时时间

        // 抽象正则
        .setTargetUrlRex("https://blog.csdn.net/qqhjqs/article/details/[0-9]+") // 设置目标页面url的正则表达式

        // 解析页面
        .setPageParser(new CrawlerService<Blog>() {

            /**
             * 有的url可能在某个场景下不需要可在此处理
             * 默认返回false,可以不做处理
             * @param url 即将要抓取的url
             * @return
             */
            @Override
            public boolean isExist(String url) {
                if ("https://blog.csdn.net/qqhjqs/article/details/79101846".equals(url)) {
                    return true;
                }
                return false;
            }

            /**
             * 有的页面有WAF,可以再真正解析前,做个判断,遇到特殊标志的直接可以跳过
             * 默认返回true,可以不做处理
             * @param document 即将要解析的document
             * @return
             */
            @Override
            public boolean isContinue(Document document) {
                if ("最近和未来要做的事 - CSDN博客".equals(document.title())) {
                    System.out.println("模拟遇到WAF此页面不做解析");
                    return false;
                }
                return true;
            }

            /**
             * 目标页面的doc对象,还有通过注解处理后的对象
             * @param doc 文档内容
             * @param pageObj 封装的对象
             */
            @Override
            public void parsePage(Document doc, Blog pageObj) {
                // 可进行二次处理
                pageObj.setReadNum(pageObj.getReadNum().replace("阅读数:", ""));
            }


            // 保存数据

            /**
             * 可以做保存对象的处理
             * @param pageObj 页面对象
             */
            @Override
            public void save(Blog pageObj) {
                System.out.println("save blog summery: " + pageObj.toString());
            }
        }) // 自定义解析service


        .build().start(); // 启动

Настройка аннотаций объекта данных страницы

@CssSelector(selector = "#mainBox > main > div.blog-content-box > div.article-title-box > h1", resultType = SelectType.TEXT)
private String title;

@CssSelector(selector = "#mainBox > main > div.blog-content-box > div.article-info-box > div > span.time", dateFormat = "yyyy年MM月dd日 HH:mm:ss")
private Date lastUpdateDate;

@CssSelector(selector = "#mainBox > main >

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Собственный простой фреймворк для краулеров. Расширить Свернуть
MIT
Отмена

Обновления (1)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://gitlife.ru/oschina-mirror/backwxc-vw-crawler.git
git@gitlife.ru:oschina-mirror/backwxc-vw-crawler.git
oschina-mirror
backwxc-vw-crawler
backwxc-vw-crawler
master