美文网首页
百度竞价 - 关键词规划师 关键词采集

百度竞价 - 关键词规划师 关键词采集

作者: Python岳 | 来源:发表于2018-11-10 16:21 被阅读0次

    此篇文章,建议在PC端观看。

    整篇阅读时间,看个人理解。

    config 以及 cookie需要自行抓包填写

    userid、token、eventId、reqid这四个值的来源,为抓包'关键词规划师',

    userid为整数类型,token、eventId、reqid为字符串类型。

    百度竞价中的关键词规划师,是SEO从业者很好的关键词来源。
    那要如何才能获取这里的关键词内容呢?
    本代码是基于网络上2.7的版本,修改成3.*也能使用。
    (其实根本就只是改了一下print,23333)

    同样,本代码没有一步步教你如何解决登陆、获取cookie的问题,直接是采用登陆后的cookie,以及登陆后的from_data数据。注意看下面代码中顶部的注释,不然运行不起来别怪我。

    
    # -*- coding: utf-8 -*-
    #本代码改编自网络上Python2.7版本代码。
    #Python版本:3.*,需要安装requests,JSON库不知道要不要重新安装
    #使用本代码,首先将代码保存为.py文件,并且在相同目录中新建名字为cigeng的txt文件
    #在cigeng.txt文件中输入要采集的关键词,一行一个。保存。
    #成功采集后的数据,保存在相同目录中resultkeys.txt文件中。
    #如果只要关键词,不要其他黑马等数据,那么就修改key_data函数下else中的数据。
    import requests
    import json
    import time
    
    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,
                #在下面config这个变量值下面的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 = None
        return resultitem,erry
        
    config={
    #这部分数据和下面的cookie,直接开浏览器抓包就能看到相应数据。复制黏贴到相应位置
            '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就可以。
                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,kwc)
    ##          kws.append(str(word))
    ##          print (word)
            erry=None
        return kws,erry
        
        
    sfile = open('resultkeys.txt', 'w')  # 结果保存文件
    faileds = open('faileds.txt', 'w')  # 查询失败保存文件
    for key in open("cigeng.txt"):  #要查询的关键词存放的载体,一行一个,同当前代码文件相同目录。
        key=key.strip()
        print ("正在拓展:%s"%key)
        resultitem,erry=url_data(key,config,cookie)
        if erry:
            print (key,erry)
            faileds.write('%s\n' % key)
            faileds.flush()
            continue
        keylist,erry=key_data(resultitem)
        if erry:
            print (key,erry)
            faileds.write('%s\n' % word)
            faileds.flush()
            continue
        for kw in keylist:
            sfile.write('%s\n'%kw)
            faileds.flush()
            continue
    

    下面的代码由浏览器(360极速浏览器)抓包,https://curl.trillworks.com/#(需要挂梯子)网站格式化后的数据,没有做任何更改。方便新人理解。需要导入JSON,用JSON解析代码,不过要注意JSON含的内容太多,小心IDLE卡死。

    import requests
    
    cookies = {'这部分有数据的,我删了,自己抓包后就知道'
    }
    
    headers = {
        'Origin': 'http://fengchao.baidu.com',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'User-Agent': 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
        'Content-Type': 'application/x-www-form-urlencoded',
        'Accept': '*/*',
        'Referer': 'http://fengchao.baidu.com/nirvana/main.html?userid=6941153',
        'Connection': 'keep-alive',
    }
    
    params = (
        ('path', 'jupiter/GET/kr/word'),
        ('reqid', '4b534c46-1ea0-4eca-b581-154181423578'),
    )
    
    data = {
      'userid': '',
      'token': '',
      'reqid': '',
      'path': 'jupiter/GET/kr/word',
      'eventId': '',
      'params': '{"logid":,"entry":"kr_station","attrWordContainTag":[],"needAutounit":false,"querytype":1,"query":"\u622A\u6B62\u9600","querySessions":["\u622A\u6B62\u9600"],"forceReload":true,"regions":"","device":0,"showWordContain":"","showWordNotContain":"","attrShowReasonTag":[],"attrBusinessPointTag":[],"filterAccountWord":true,"rgfilter":1,"planid":0,"unitid":0,"pageNo":1,"pageSize":300,"order":"","orderBy":""}'
    }
    
    response = requests.post('http://fengchao.baidu.com/nirvana/request.ajax', headers=headers, params=params, cookies=cookies, data=data)
    

    2018-11-13,有人说,既然我能上百度,我为什么还要登陆账号,抓包复制数据给python脚本。
    ……emmmmm这是因为,我不知道cookie以及userid、token、reqid的获取来源。
    所以目前就用这种笨办法。不过至少也比手动好了不少。

    另外提供几个小点子:主关键词——比如python,放到百度里搜索一下,底部的相关搜索,也是一个很好的关键词来源,可以考虑百度竞价采集一遍关键词以后,再写一个代码,采集这些关键词的相关搜索关键词。

    另外百度百科右侧部分的词条标题,也是和当前搜索关键词相关,这部分标题也可以采集过来,做专题。

    相关文章

      网友评论

          本文标题:百度竞价 - 关键词规划师 关键词采集

          本文链接:https://www.haomeiwen.com/subject/irgzxqtx.html