美文网首页数据
来爬一爬百度、腾讯、搜狗指数

来爬一爬百度、腾讯、搜狗指数

作者: 周一ing | 来源:发表于2019-07-17 11:15 被阅读0次

    本篇目标

    为了计算某个明星的一段时间综合热度,需要爬取该明星的百度指数、腾讯指数、搜狗指数。当然也可以应用在其他词条的热度啦,这里的时间设置是2019.01.01-2019.03.31,可自行设置所需时间。

    以搜狗指数为例:name是所要搜索词条,allweixin是爬取结果


    输入输出文件 name文件

    百度指数

    搜狗指数:这里的目标是得到平均值,官网上鼠标悬浮的时候会显示平均值,但这里截图无法显示。


    image.png

    腾讯指数

    环境及导入库说明

    • python版本:2.7.9
    • 需要安装的库:request
    • 其他库说明:其他导入的库都是自带的,csv用于读取存储csv文件(文本格式,但是可用excel打开),
      os用于操作文件目录,sys用于处理python的一些设置
    # -*- coding: utf-8 -*-
    import csv
    import os
    import requests, json
    import sys
    reload(sys)
    sys.setdefaultencoding('utf8')
    

    百度指数

    
    

    搜狗指数

    • 第一步是找到我们要的数据在哪里。如果查看源代码源代码里没有所要的数据,就说明这个数据是动态加载的,所以要找到我们所在的数据是由哪个请求发出的,以及在返回数据的哪个部分。这里是ajax请求,打开开发者工具(谷歌浏览器快捷键是ctrl+shift+I),ajax请求一般是在Network的XHR请求部分,打开后根据你要的数据在网页上操作,比如这里搜李汶翰的指数可以再点下确定,就会发现多了个请求,这个请求一般就是所要数据所在的请求,这里我们要的值在avgPv这里


      image.png
    • 找到之后,就可以模拟发请求了
      其中cookie可以在headers里找,具体参见之前的文章《python-新浪爬虫之模拟登录》
    def get_windex(index_list):
        '''
        获取微信指数
        输入示例
        index_list = ['李汶翰','赵品霖']
        输出,avg代表对应微信指数值
        data_list = ['name':'李汶翰','avg': 0]
        '''
        headers = {
            'user-agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
            'cache-control': "no-cache",
            #这里的cookie可以在headers里找到粘贴过来
            'cookie':''
            }
    
        data_list = []
    
        for name in index_list:
            #去除名字空格
            name = name.strip()        
            #这里的时间取20190101到20190331,在startDate是开始时间,endDate是结束时间
            url = 'http://zhishu.sogou.com/getDateData?kwdNamesStr=%s&startDate=20190101&endDate=20190331&dataType=SEARCH_ALL&queryType=INPUT'%name        
            response = requests.get(url, headers = headers)
            content = json.loads(response.text)
            
            data = {}
            #python2本身内部代码的编码有str和unicode两种编码,然而文件写入到windows系统时候,windows上的是gb2312编码,所以就导致了乱码问题
            #所以写入中文字符的时候,先把python里面的中文字符串decode成utf-8,再encode为gbk编码
            data['name'] = name.decode('utf-8').encode('gbk')
            try:
                data['avg'] = content['data']['infoList'][0]['avgPv']
                data_list.append(data)
            #搜索不到或者出错指数值设为0
            except Exception, e:
                if hasattr(e, "code"):
                    print e.code
                if hasattr(e, "reason"):
                    print e.reason
                data['avg'] = 0
                data_list.append(data)
                continue
                
        #新建allweixin.csv,并将结果写入
        fieldnames = ['name','avg']
        file2 = 'H:/shixi/result/allweixin.csv'
        main_file = operate_file(file2,fieldnames) 
        main_file.creat_csv()
        main_file.write_csv(data_list) 
    
    #封装了一个读写csv的类
    class operate_file():
        def __init__(self, file, fieldnames):  
            self.fieldnames = fieldnames
            self.filename = file
    
        def creat_csv(self):
            with open(self.filename, 'wb') as csvfile:
                fieldnames = self.fieldnames
                writer = csv.DictWriter(csvfile, fieldnames=fieldnames) 
                writer.writeheader()
    
        def write_csv(self, info_list):
            with open(self.filename, 'ab') as csvfile:
                fieldnames = self.fieldnames
                writer = csv.DictWriter(csvfile, fieldnames=fieldnames)     
                for hotel in info_list:
                    try:
                        writer.writerow(hotel)
                    except Exception,e:
                        print e
                        #print hotel
                        #print self.fieldnames
    
    if __name__ == "__main__":
    
        index_list = []
        file = 'H:/shixi/result/name.csv'
        for line in csv.DictReader(open(file)):     
            index_list.append(line['name'].decode('gbk').encode('utf-8'))
        get_windex(index_list)
    

    相关文章

      网友评论

        本文标题:来爬一爬百度、腾讯、搜狗指数

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