2017-11-25 286 views
0

我是Python新手。我想要做的是使用Webhose.io API将Web数据抓取成Json格式。每个查询会给我5篇文章/文章。我正在尝试为数据集获取1000篇文章。使用Python和Webhose.io将网页数据抓取成子格式

Webhose可以免费注册,每月免费提供1000个请求,所以这应该足以获取数据集。

我的代码目前looke这样的:

import webhoseio, json, io 

webhoseio.config(token="YOUR API KEY") 

query_params = { 
"q": "organization:Amazon", 
"sort": "crawled" 
} 

results = webhoseio.query("filterWebContent", query_params) 

print(len(results)) 

with open('dataset.txt','w', encoding='utf8') as outfile: 
output = json.dumps(results, 
        indent=4, sort_keys=True, 
        separators=(',', ': '), ensure_ascii=False) 

outfile.write(output) 
#output = json.load(outfile) 
results = webhoseio.get_next() 
output += json.dumps(results, 
        indent=4, sort_keys=True, 
        separators=(',', ': '), ensure_ascii=False) 
outfile.write(output) 

每一次我跑的代码,貌似我只使用1个请求。我不确定我收到了多少篇文章。有没有办法修改代码,以便我可以获得1000篇文章(每个请求5篇文章,需要200个请求),还有一种方法可以在Webhose中更改爬网日期,以便200请求不会给我相同的文章。

谢谢

回答

0

内容第100个职位查询都存储在results['posts']的(文章,元数据)。因此,当您拨打len(results['posts'])时,您应该获得100个(假设您的查询产生至少100个结果。) 要获得接下来的100个结果,您应该拨打webhoseio.get_next()。 要获得所有批次,你可以做类似

output = [] 
while True: 
    temp = webhoseio.get_next() 
    output = output+temp['posts'] 
    if temp['moreResultsAvailable'] <= 0: 
     break