解决Newspaper3k中的可靠输出

时间:2019-02-22 19:21:45

标签: python-3.x anaconda news-feed miniconda

当前行为:

在尝试使用News-aggregator package 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上发布的当前链接而有所不同):

在连续的Print输出运行中,在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

打印实际链接将与上述链接计数打印相同。我尝试使用许多不同的新闻来源,以及相同的意外变化结果。我是否需要更改用户代理标题?这是检测问题吗?如何产生可靠的结果?

任何帮助将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:0)

通过更好地理解标题6.1.3 Article caching in the user documentation下的默认缓存,我的问题得以解决。

除了我的无知之外,我的困惑还来自read the docs 'Documentation' listed the caching function as a TODO as can be seen here

经过仔细检查,我发现:

  

默认情况下,报纸会缓存所有以前提取的文章   并消除任何已提取的文章。此功能   存在以防止重复的文章并提高提取速度。

     

cbs_paper.size()的返回值从1030更改为2,因为   当我们第一次爬cbs时,我们发现了1030篇文章。但是,在我们的   第二次抓取,我们删除了所有已经   爬行。这意味着自我们的第一篇文章以来已发表了2篇新文章   萃取。

     

您可以通过以下方式选择退出此功能:   memoize_articles参数。   您也可以通过较低的   高级部分中介绍的“配置”对象级别。

import multiprocessing as mp
import numpy as np
from scipy import signal

arrays = [np.ones([500, 500])] * 100
kernel = np.ones([30, 30])

def conv(array, kernel):
  return (array, kernel, signal.correlate(array, kernel, mode="valid", method="fft"))

pool = mp.Pool(processes=4)
results = [pool.apply(conv, args=(arr, kernel)) for arr in arrays]