Адресация надежного вывода в Newspaper3k - PullRequest
0 голосов
/ 22 февраля 2019

Текущее поведение:

При попытке использовать пакет агрегатора новостей Newspaper3k я не могу получить согласованный / надежный вывод.

Настройка системы / среды:

Windows 10
Miniconda3 4.5.12
Python 3.7.1
Newspaper3k 0.2.8

Шаги (код) для воспроизведения:

import newspaper

cnn_paper = newspaper.build('http://cnn.com')
print(cnn_paper.size())

Ожидаемое поведение / выход (зависит от текущих ссылок, опубликованных на cnn):

Производить согласованное количестворазмещенные ссылки на cnn при последовательных выводах на печать.

Фактическое поведение / вывод

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

1st Run Print output: 94 (as of time of posting this question)
2nd Run Print output: 0 
3rd Run Print output: 18
4th Run Print output: 7

Печать фактических ссылок будет зависеть от печати счетчика выше.Я попытался использовать несколько различных источников новостей, и те же самые неожиданные результаты отклонения.Нужно ли менять заголовок User-Agent?Это проблема обнаружения?Как получить достоверные результаты?

Любая помощь будет высоко ценится.

Спасибо.

1 Ответ

0 голосов
/ 27 февраля 2019

Моя проблема была решена путем лучшего понимания кэширования по умолчанию, которое можно найти под заголовком 6.1.3 Кэширование статей в пользовательской документации .

Помимо моего общего невежества, мое замешательство произошло из-за того факта, что в , прочитанном в документации 'Документация', функция кэширования указана как TODO, что можно увидеть здесь

При более тщательном изучении я обнаружил:

По умолчанию газета кэширует все ранее извлеченные статьи и освобождает от ответственности любую статью, которую она уже извлекла. Эта функция существует для предотвращения дублирования статей и увеличения скорости извлечения.

Возвращаемое значение cbs_paper.size () изменяется с 1030 до 2, потому что когда мы впервые сканировали cbs, мы нашли 1030 статей.Однако при втором сканировании мы удаляем все статьи, которые уже были просканированы.Это означает, что с момента нашего первого извлечения были опубликованы 2 новые статьи.

Вы можете отказаться от этой функции с параметром memoize_articlesparameter.Вы также можете передавать объекты «Config» нижнего уровня, как описано в расширенном разделе.

>>>import newspaper
>>>cbs_paper = newspaper.build('http://cbs.com', memoize_articles=False)
>>>cbs_paper.size()1030
...