利用python来完成关键词挖掘,获取关键词数据是seo中比较基础的部分,渠道很多,开水以前也有专门的讲解文章搜索需求挖掘,推广词库收集整理。这次我们就其中关键词搜集的一种方式来展开,来采集凤巢的关键词数据,对关键词的分析,以及使用才是重点!
python与seo
为什么要使用python来完成呢,因为如果直接在凤巢后台操作,不可以批量完成,拓展大量的关键词就非常的麻烦;也有人会说到有一系列的软件,软件有一个缺点就是要登录,对我们的账户安全没有保障,在一个就是还得忍受软件提供商的广告,能自己做的就不用别人的。来说说实现Python批量挖掘百度凤巢关键词过程的一些要点。
python登录百度凤巢
百度、新浪等大平台的模拟登录本身难度就比较大,百度凤巢又涉及资金和短信验证,所以模拟登录成本较高。这里我们采用简单的操作方法,利用cookies来完成登录,这样只要在自己的浏览器登录账户,抓一下cookies就可以完成登录了。
凤巢关键词提取
通过抓包发现凤巢的关键词规划师返回的是json数据,使用json模块把返回的json数据可识别,直接[\'word\']提取我们数据就可以了。
python代码
# -*- coding: utf-8 -*-\"\"\"verseion: beta2.1说明:百度凤巢挖词脚本 (代码符合PEP8标注)请勿用于任何商业用户,版权最终归作者所有\"\"\"import requestsimport jsonimport timeimport sys reload(sys)sys.setdefaultencoding( \"utf-8\" )class UnicodeStreamFilter: def __init__(self, target): self.target = target self.encoding = \'utf-8\' self.errors = \'replace\' self.encode_to = self.target.encoding def write(self, s): if type(s) == str: s = s.decode(\"utf-8\") s = s.encode(self.encode_to, self.errors).decode(self.encode_to) self.target.write(s) if sys.stdout.encoding == \'cp936\': sys.stdout = UnicodeStreamFilter(sys.stdout) #以上为cmd下utf-8中文输出的终极解决方案!def url_data(key,config,cookie,shibai=3):headers={\'Accept\': \'*/*\',\'Accept-Encoding\': \'gzip, deflate\',\'Accept-Language\': \'zh-CN,zh;q=0.8,en;q=0.6\',\'Connection\': \'keep-alive\',\'Content-Type\': \'application/x-www-form-urlencoded\',\'Cookie\': cookie,\'Host\': \'fengchao.baidu.com\',\'Origin\': \'http://fengchao.baidu.com\',\'Referer\': \'http://fengchao.baidu.com/nirvana/main.html?userid=%s\' % config[\'userid\'],\'User-Agent\': \'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 \'\'(KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\'}params={\"logid\":401075077,\"query\":key,\"querySessions\":[key],\"querytype\":1,\"regions\":\"16\",\"device\":0,\"rgfilter\":1,\"entry\":\"kr_station\",\"planid\":\"0\",\"unitid\":\"0\",\"needAutounit\":False,\"filterAccountWord\":True,\"attrShowReasonTag\":[],\"attrBusinessPointTag\":[],\"attrWordContainTag\":[],\"showWordContain\":\"\",\"showWordNotContain\":\"\",\"pageNo\":1,\"pageSize\":1000,\"orderBy\":\"\",\"order\":\"\",\"forceReload\":True}from_data={\'params\':json.dumps(params),\'path\':\'jupiter/GET/kr/word\',\'userid\':config[\'userid\'],\'token\':config[\'token\'],\'eventId\':config[\'eventId\'],\'reqid\':config[\'reqid\']}qurl=\"http://fengchao.baidu.com/nirvana/request.ajax?path=jupiter/GET/kr/word&reqid=%s\"%config[\'reqid\']try:whtml=requests.post(qurl,headers=headers,data=from_data)except requests.exceptions.RequestException:resultitem={}erry=\"请求三次都是错误!\"if shibai > 0:return url_data(key,config,cookie,shibai-1)else:whtml.encoding=\"utf-8\"try:resultitem = whtml.json()except ValueError:resultitem = {}erry = \"获取不到json数据,可能是被封了吧,谁知道呢?\"else:erry = Nonereturn resultitem,erryconfig={\'userid\': ,\'token\':\' \',\'eventId\':\' \',\'reqid\':\' \'}cookie=\" \"def key_data(resultitem):kws=[\'关键词\\t日均搜索量\\tpc\\t移动\\t竞争度\\n\']try:resultitem=resultitem[\'data\'][\'group\'][0][\'resultitem\']except (KeyError, ValueError, TypeError):resultitem=[]erry=\"没有获取到关键词\"else:for items in resultitem:word=items[\'word\']pv=items[\'pv\']#日均搜索量pvPc=items[\'pvPc\']pvWise=items[\'pvWise\']kwc=items[\'kwc\']#竞争度kwslist=str(word)+\'\\t\'+str(pv)+\'\\t\'+str(pvPc)+\'\\t\'+str(pvWise)+\'\\t\'+str(kwc)+\'\\n\'kws.append(str(kwslist))print word,pv,pvPc,pvWise,kwcerry=Nonereturn kws,errysfile = open(\'resultkeys.txt\', \'w\') # 结果保存文件faileds = open(\'faileds.txt\', \'w\') # 查询失败保存文件for key in open(\"cigeng.txt\"):key=key.strip()print \"正在拓展:%s\"%keyresultitem,erry=url_data(key,config,cookie)if erry:print key,erryfaileds.write(\'%s\\n\' % key)faileds.flush()continuekeylist,erry=key_data(resultitem)if erry:print key,erryfaileds.write(\'%s\\n\' % word)faileds.flush()continuefor kw in keylist:sfile.write(\'%s\\n\'%kw)faileds.flush()continue
代码中config和cookies的内容需要抓包获取对应数据填写即可。