如何在Python中构造搜索结果排名数据?

时间:2018-08-23 12:05:03

标签: python-3.x

在Python中构造抓取的搜索结果数据的“最佳”方法是什么?这将需要存储,以便我可以创建图表/曲线趋势,以随时间推移对关键字进行排名移动:

  • 关键字
  • 刮刮的日期/时间
  • 找到的搜索结果总数
  • 搜索结果数据(#1,#2,#3等)

我在想以下几点:

data = { 'keyword' : keyword,
          { 'datetime' : time.time(),
             { 'totalresults' : totalresults,
               '1': { 'title' : title, 'url' : url },
               '2': { 'title' : title, 'url' : url },
               '3': { 'title' : title, 'url' : url }
             }
          }
        }

不确定是否相关,但是我还没有在项目中使用数据库。我已经开发了一些项目使用MongoDB,所以我可能会用到它,因为我可以查看这些项目的代码来查看事情的完成方式。

2 个答案:

答案 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}
    ]
}