weixin_54645844
AyJwei.
2021-06-25 17:54
采纳率: 0%
浏览 80
已结题

大众点评搜索栏内的关键词抓取

请问如何抓取大众点评用户在搜索栏搜索的关键词并统计这些关键词出现的频率。

  • 点赞
  • 收藏

3条回答 默认 最新

  • weixin_43582101
    考古学家lx 2021-06-25 22:13

    用户在搜索栏搜索的关键词,这个得是服务端埋点采集或者自己统计的。

    客户端没法捕捉

    点赞 1 评论
  • liboshi123

    楼上说的对,评率你是爬不到的

    点赞 评论
  • Feng_wwf
    NDSC专家-王文峯 2021-06-25 18:22

    采纳,谢谢

    打开大众点评首页
    选择地区为“关键词”
    在搜索框中输入“王大师” (爬虫访问包含了关键词的URL)
    复制页面中的各个诊所的名字和地址到记事本中 (用正则表达式获取想要的字段,并将其保存成txt文件)
    收集完毕?
    大功告成!

    #! python3
    # coding:utf-8
    import urllib2
    import urllib
    import re
    import os
    import shutil # 高效处理文件的模块
    
    #sys为system的缩写,引入此模块是为了改变默认编码 
    import sys
    
    reload(sys)
    sys.setdefaultencoding('utf8')  #设置系统的编码为utf8,便于输入中文
    
    host = 'http://www.dianping.com'
    #自定义UA头部,直接用即可,不用理解细节
    user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36'
    headers = {'User-Agent':user_agent}
    key_word = '王大师'                                      #写好要搜索的关键词
    city_num = str(16)                                     #武汉的城市编码为16,其他城市的编码可以在点评网的URL中找到 
    directory = city_num + '\\' + unicode(key_word,'utf8')  #Windows系统下,创建中文目录名前需要制定编码,这里统一用UTF-8
    
    if os.path.exists(directory):
        shutil.rmtree(directory)
        os.makedirs(directory)  #删除后再创建对应的关键词目录
        print ('delete existed directory successfully')
    else:
        os.makedirs(directory)
        print ('create directory successfully')
    
    url = host + '/search/keyword/' + city_num
    
    def getDocument(page):
        page = str(page)
        path_name = directory + '\\page_' + page + '.txt'
        file = open(path_name, 'w+'); #创建文件
    
        #由于要搜索的关键词是中文,所以需要进行转码,这里调用了urllib.pathname2url函数
        real_url = url + '/' + '0_' + urllib.pathname2url(key_word) + '/p' + page           
        request = urllib2.Request(real_url, headers = headers)                               #发送网络请求
        response = urllib2.urlopen(request)                                                  #得到网络响应
        document = response.read().encode('utf-8')                                           #将网页源码用UTF-8解码
        items_name = re.findall(r'data-hippo-type="shop"\stitle="([^"]+)"', document, re.S)  #正则匹配出商家名
        items_address = re.findall(r'<span\sclass="addr">([^\s]+)</span>', document, re.S)   #正则匹配出地址
        result = ''
        for index in range(len(items_name)):
            result += items_name[index] + '  ' + items_address[index] + '\n'
        file.write(result)                                                                   #将结果存入文件
        file.close()
        print ('Complete!')
    
    def start_crawl():
        for index in range(0, 5):
            getDocument(index)
    
    
    start_crawl()   #开始爬数据!
    
    


     

    点赞 评论

相关推荐