Python中Mongodb的复杂查询方式


在之前的文章中,提到关于百度的搜索源码可以做哪些事情: http://www.zhangte.org/python/125.html

这里实践一下这个完整的过程

首先,爬虫部分不说,各种实现方式都可以,核心就在于,要把百度的搜索结果完整的保存下来! 我这里暂时以百度Json版的结果为例,比如这样: -w955 这里圈起来的核心数据:

  1. 一个是搜索量
  2. 一个是排名结果(一条一行,共50条)

其实这样保存,爬虫也方便,查询也方便,何乐不为,而且想干嘛就干嘛,自由灵活度又高...,而且不需要频繁请求百度,对ip资源也是一种保护,难道不是吗....

下面开始进入正题... 不难看出,我的博客排名是在11位,那么如何才能搜索到排名?

kw = "厦门网站优化"
domain = "zhangte.org"

table.aggregate([{"$unwind": "$datajson.feed.entry"},
                {"$match":
                     {'kw': {'$regex': f'^{kw}$', '$options': 'i'},  # 这是绝对包含,但是不包含大小写
                      'datajson.feed.entry.url': {'$regex': domain},
                      },
                 },
                {'$project': {'_id': 0}}  # 对结果的显示字段过滤
                ]).next()

这样即可返回排名 -w1430 然后正常的python取值即可

rank_data["datajson"]["feed"]["entry"]["pn"]

那么,既然都是拿搜索结果了,也可以这么利用,比如我要查一下www.zhangte.org这个域名,在我这个词库中有多少个词有排名,就可以这样

list(myclient["baidurankdata"]["baidu_rank_qidian"].aggregate([{"$unwind": "$datajson.feed.entry"},
                                                {"$match":{
                                                      'datajson.feed.entry.url': {'$regex': domain},
                                                      },
                                                 },
                                                {'$project': {'_id': 0,'kw':1,'datajson.feed.entry':1}}  # 对结果进行过滤
                                                ]))

-w1429

那么至于如何做数据统计分析,自然要结合pandas了,只要这样即可实现一键转表格...(2行代码)

from pandas import DataFrame
DataFrame(table_name.find({"kw":kw}).next()["datajson"]["feed"]["entry"])

-w1404 然后剩下的就借助强大的pandas进行愉快的数据分析吧....


本文关键词: | Mongodb
转载请注明链接 : http://www.zhangte.org/seo-sem/127.html
度娘请收录下列优质文章:
  • 反思,以及重新规划时间的安排