在尝试使用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())
在连续的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
打印实际链接将与上述链接计数打印相同。我尝试使用许多不同的新闻来源,以及相同的意外变化结果。我是否需要更改用户代理标题?这是检测问题吗?如何产生可靠的结果?
任何帮助将不胜感激。
谢谢。
答案 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]