在Python中构造抓取的搜索结果数据的“最佳”方法是什么?这将需要存储,以便我可以创建图表/曲线趋势,以随时间推移对关键字进行排名移动:
我在想以下几点:
data = { 'keyword' : keyword,
{ 'datetime' : time.time(),
{ 'totalresults' : totalresults,
'1': { 'title' : title, 'url' : url },
'2': { 'title' : title, 'url' : url },
'3': { 'title' : title, 'url' : url }
}
}
}
不确定是否相关,但是我还没有在项目中使用数据库。我已经开发了一些项目使用MongoDB,所以我可能会用到它,因为我可以查看这些项目的代码来查看事情的完成方式。
答案 0 :(得分:1)
如果您正在考虑单个json(Table)对象,建议您以以下格式保存数据。
data = { 'keyword' : keyword,
'datetime' : time.time(),
'totalresults' : totalresults,
'search_results': {
'1': { 'title' : title, 'url' : url },
'2': { 'title' : title, 'url' : url },
'3': { 'title' : title, 'url' : url }
}
}
如果使用上述格式,则几乎没有问题,例如,假设搜索结果的数据量很大,可能有100000+个结果,因此对象大小将很大,因此,无论使用哪个数据库都将出现问题。我知道mongoDB有16MB的限制。其他数据库也是如此。
要解决此问题,您可以将数据拆分为多个表。 您可以将其拆分为不同的json(Table)。像这样
search_analytics = { 'id' : UUID,
'keyword' : keyword,
'datetime' : time.time() }
search_results = { 'search_id': reference to specific search request,
'search_results_details': {
'rank' : rank on which the search result appeared,
'title' : title,
'url' : url
}
}
示例:
search_analytics = { 'id' : 12344-a12-123-123,
'keyword' : 'Beautiful',
'datetime' : time.time() }
search_results = { 'search_id': 12344-a12-123-123,
'search_results_details': {
'rank' : 1,
'title' : "Beautiful Mind",
'url' : 'https://example.com/a'
}
}
search_results = { 'search_id': 12344-a12-123-123,
'search_results_details': {
'rank' : 2,
'title' : "Beautiful Soul",
'url' : 'https://example.com/b'
}
}
search_results = { 'search_id': 12344-a12-123-123,
'search_results_details': {
'rank' : 1,
'title' : "Beautiful House",
'url' : 'https://example.com/c'
}
}
答案 1 :(得分:1)
您应将search_results
列为列表,而不是按序号索引的字典。这样,您的totalresults
就多余了,因为它只是search_results
列表的长度。
data = {
'keyword': keyword,
'datetime': time.time(),
'search_results': [
{'title': title, 'url': url},
{'title': title, 'url': url},
{'title': title, 'url': url}
]
}