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

OSCHINA-MIRROR/Flying_Cat-Article_Crawler

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

Article_Crawler

Описание проекта

Конфигурационный фреймворк для сбора статей с сайтов типа блогов и новостей.

Структура папок проекта

  • config/ каталог конфигурационных файлов
  • crawlers/ каталог файлов пауков
  • log/ каталог лог-файлов
  • utils/ каталог вспомогательных файлов

Описание работы пауков

Сбор статей с сайта осуществляется двумя основными шагами:

  1. Получение всех URL статей со страниц сайта
  2. Получение данных статьи по её URL (название, содержание и т.д.)

На первом этапе сайты делятся на две категории:

  1. Сайты, использующие номер страницы для пагинации
  2. Сайты, использующие динамическую загрузку страниц

Для каждого типа сайта требуется использование различных методов получения всех URL статей, что указывается в поле mode конфигурационного файла (pagination, dynamic loading).## Описание конфигурационных файлов

Для сайтов, использующих номер страницы для пагинации

Описание

[Название_страницы]
mode=pagination
page_name=Название_страницы
page_url=url_страницы
page_pagination_url=url_пагинации
start_pagination_number=начальный_номер_страницы
page_is_end=метод_определения_конца_пагинации(404|single_page|xpath)
article_xpath=xpath_элемента_статьи
article_url_xpath=xpath_элемента_url_статьи
start_article_number=начальный_номер_элемента_статьи
end_article_number=конечный_номер_элемента_статьи
article_number_gap=интервал_номеров_элементов_статьи
title_xpath=xpath_элемента_названия_статьи
content_xpath=xpath_элемента_содержания_статьи
detail_splice_flag=необходимость_склеивания_url_деталей(true|false)
splice_base_url=основной_url_для_склейки

Перевод:

[Page_Name]
mode=pagination
page_name=Page Name
page_url=url_of_the_page
page_pagination_url=url_of_pagination
start_pagination_number=start_pagination_number
page_is_end=end_detection_method(404|single_page|xpath)
article_xpath=xpath_of_article_element
article_url_xpath=xpath_of_article_url_element
start_article_number=start_article_number
end_article_number=end_article_number
article_number_gap=article_number_gap
title_xpath=xpath_of_title_element
content_xpath=xpath_of_content_element
detail_splice_flag=necessity_of_detail_url_splicing(true|false)
splice_base_url=base_url_for_splicing
```Поле `page_is_end` имеет три варианта:
1. 404 (возвращает ошибку 404 при достижении конца пагинации)
2. single_page (страница состоит из одной страницы, разделение не требуется, поле `page_pagination_url` может быть пустым, значение поля `start_pagination_number` должно быть больше 1)
3. xpath (определяет конец пагинации по указанному xpath)

Поле `detail_splice_flag` имеет два варианта:
1. true (при сборе деталей статьи url статьи склеивается с основным url)
2. false (склеивание не требуется)

Пример сайта <http://me.tryblockchain.org>

Полученный url статьи  bitcoin-blockchain-misunderstand.html,
а реальный адрес этой статьи  <http://me.tryblockchain.org/bitcoin-blockchain-misunderstand.html>. Поэтому требуется выполнение конкатенации.

Если конкатенация не нужна, поле `splice_base_url` может быть пустым.

#### Пример
```ini
[me_tryblockchain_org]
mode=pagination
page_name=me_tryblockchain_org
page_url=http://me.tryblockchain.org{0}
page_pagination_url=/all_{0}.html
start_pagination_number=2
page_is_end=404
article_xpath=//*[@id="main-content"]/div[1]/div[1]/div/div[{0}]
article_url_xpath=/a/@href
start_article_number=1
end_article_number=20
article_number_gap=1
title_xpath=//*[@id="main-content"]/div[1]/div[1]/div/div[1]/h1/text()
content_xpath=//*[@id="main-content"]/div[1]/div[1]/div/div[2]
detail_splice_flag=true
splice_base_url=http://me.tryblockchain.org/{0}

Обратите внимание на {0} в полях page_url и page_pagination_url. Это необходимый способ форматирования строк в Python, как показано в приведённом выше примере. Например, реальный URL второй страницы сайта будет http://me.tryblockchain.org/all_2.html.

Дополнительную информацию можно найти в документации по функции format(), а также применительно к полю splice_base_url.Часто пути XPath для всех статей одной страницы имеют регулярность, отличаясь лишь последним номером. В поле article_xpath {0} представляет порядковый номер статьи в HTML-коде страницы.

Например, если на странице есть 20 статей, то //*[@id="main-content"]/div[1]/div[1]/div/div[1] указывает на местоположение первого абзаца статьи в HTML-коде, а //*[@id="main-content"]/div[1]/div[1]/div/div[20] — на местоположение последнего абзаца статьи (если вы не знакомы с XPath, рекомендуется изучить его основы). Таким образом, начальное значение номера статьи равно 1, конечное равно 20, шаг равен 1, что отражено в конфигурационном файле следующим образом:

article_xpath=//*[@id="main-content"]/div[1]/div[1]/div/div[{0}]
article_url_xpath=/a/@href
start_article_number=1
end_article_number=20
article_number_gap=1

При выполнении парсинга {0} в поле article_xpath заменяется на номер статьи, чтобы получить доступ ко всем статьям.

article_url_xpath представляет собой путь XPath для URL статьи в HTML-коде. Обычно он находится внутри HTML-элемента, указанного путём XPath, поэтому достаточно указать часть пути. Например, в приведённом выше примере реальный путь XPath для URL статьи будет //*[@id="main-content"]/div[1]/div[1]/div/div[{0}]/a/@href.

Аналогично, при выполнении парсинга {0} заменяется на номер статьи, чтобы получить доступ ко всем статьям. title_xpath и content_xpath представляют собой XPath пути для заголовка статьи и содержимого соответственно при парсинге деталей статьи. Эти пути следует заполнить в соответствии с структурой HTML-кода.### Динамически загружаемые страницы сайтов

Описание

[Название_страницы]
mode=динамическая_загрузка
page_name=Название_страницы
page_url=URL_страницы
request_method=метод_запроса_страницы (get|post)
request_param=параметры_запроса_страницы
page_is_end=метод_определения_конца_страницы (404|одна_страница|xpath_пути)
article_xpath=xpath_пути_тега_статьи_в_HTML_коде
article_url_xpath=xpath_пути_тега_URL_статьи_в_HTML_коде
start_article_number=начальный_номер_тега_статьи_в_HTML_коде
end_article_number=конечный_номер_тега_статьи_в_HTML_коде
article_number_gap=интервал_номеров
title_xpath=xpath_пути_заголовка_статьи
content_xpath=xpath_пути_содержимого_статьи
detail_splice_flag=необходимость_склеивания_URL_при_парсинге_деталей_статьи (true|false)
splice_base_url=основной_URL_для_склеивания

Поле request_method имеет два варианта:

  1. get (означает метод запроса страницы — GET)
  2. post (означает метод запроса страницы — POST)

Поле request_param представляет параметры запроса страницы. Его следует заполнять в виде словаря Python, как показано ниже.

Настройте остальные поля аналогично вышеописанному.

Пример

[oschina_net_u_3782027]
mode=динамическая_загрузка
page_name=oschina_net_u_3782027
page_url=https://my.oschina.net/u/3782027
request_method=get
request_param={"catalogId": 0, "q": "", "p": {0}, "type": "ajax"}
page_is_end=//*[@id="newestBlogList"]/div[1]/div[1]
article_xpath=//*[@id="newestBlogList"]/div[1]/div[{0}]
article_url_xpath=/div[1]/a/@href
start_article_number=1
end_article_number=20
article_number_gap=1
title_xpath=//*[@id="mainScreen"]/div/div[1]/div/div[2]/div[1]/div[2]/h1/text()
content_xpath=//*[@id="articleContent"]
detail_splice_flag=false
splice_base_url=
```Обратите внимание на поле `request_param`, которое должно иметь удвоенные фигурные скобки для корректного форматирования строки функцией `format()`.

Параметр `p` в словаре запроса представляет параметр пагинации, поэтому его также следует использовать `{0}`, чтобы парсер мог выполнять последовательный проход. Настройка параметров запроса зависит от конкретного сайта и требует анализа конкретной страницы.

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

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

Введение

Это фреймворк для краулеров, которые используются для сбора статей с таких веб-сайтов, как блоги и консультационные платформы. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

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

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