Конфигурационный фреймворк для сбора статей с сайтов типа блогов и новостей.
Сбор статей с сайта осуществляется двумя основными шагами:
На первом этапе сайты делятся на две категории:
Для каждого типа сайта требуется использование различных методов получения всех 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
имеет два варианта:
Поле 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 )