资讯专栏INFORMATION COLUMN

爬去哪儿网5A景点评论

wudengzan / 792人阅读

摘要:目的获得去哪儿网评论信息包括评论和打分,保存到本地文件。去除无用的评论保存到本地文件哪网景区的的评论评分去哪网获得景点本次共爬取信息条数据成果展示外加反省大概万条吧美滋滋等我开心完就回来就回来整理出现的问题欢迎各位大佬批评指正

目的

获得去哪儿网评论信息(包括评论和打分),保存到本地csv文件。

前期准备工作(踩点)

1、打开网站,在门票搜索框直接输入“5A”,发现可以获得5A景区列表。

2、按下F12,让我们看一看,他们是如何组织这些景点信息的

哈哈,可以看到他们把所有的景点信息都放在了一个json文件里面,也就说我们直接获取这个json文件就能直接得到5A景点的列表了。
下面是获取json的url,参数一目了然有没有?!

http://piao.qunar.com/ticket/list.json?keyword=5A®ion=&from=mps_search_suggest&page=2
3、接下来我们再研究一下每个景点的详情页

一样的配方,一样的味道!每个景点所有的评论依然在一个json文件里面
看到下面url里面的sightId了吗,经过验证这个就是景点的编号.

http://piao.qunar.com/ticket/detailLight/sightCommentList.json?sightId=3076&index=2&page=2&pageSize=10&tagType=0

现在我们大致已经有了思路.第一步,获得所有5A景点的信息用列表保存[景点名字,景点id],第二部,由景点id可以获得景点评论.一切看起来都是那么顺利.

4、等等似乎有什么不对我们再仔细看看

注意到左边json里面的sightid了吗?是"1582294258"明显不是我们刚才获取评论时用到的那个呀!倒是和地址栏里面的那个是一样的.好吧,看来看来他们对每个景点设置两个id,一个用于获取html文件(记为id)另一个是评论id(记为rid).看来需要研究一下怎么把id变为rid

好吧,发现这个id隐藏在head标签下喽.

上代码

采完点,我们就可以写代码了
import pandas as pd
import requests as req
import time,json

#获得景点id
def GetId():
    sightlist = []#储存包含景点列表的json
    for i in range(1,23):#先把所有景点列表的json都下载下来
        url = "http://piao.qunar.com/ticket/list.json?from=mpl_search_suggest_h&keyword=5a&page=" + str(i) + "&sort="
        response = req.get(url)
        r = json.loads(response.text)
        sightlist.append(r)
        response.close
        #time.sleep(3)
    sight = {}#景点仓库所有的景点及其对应的id都放在这里
    for jsons in sightlist:#处理每个json,获得景点信息
        lists = jsons["data"]["sightList"]
        for each in lists:
            #print(each["sightName"])
            key = each["sightName"]
            sight[key] = each["sightId"]
    
    return sight
#垃圾查找函数,不会正则表达式,真是无奈
def search(s,e,r):
    start = r.find(s)
    l = len(s)
    end = r.find(e,start+l,start+100)
    rr = r[start+l:end]
    return rr
#获得评论id
def Getrid(id):
    url = "http://piao.qunar.com/ticket/detail_" + str(id) + ".html"
    response = req.get(url)
    text = response.text
    rid = search("piao.qunar.com/ticket/detail_",".html",text)#这个方法是我百度的,有些时候用起来还真是方便
    num = search("
  • 全部(",")
  • ",text) dd = [] dd.append(rid) dd.append(num) return dd #获得一个景点的评论 def Getcom(rid,num,name): comments = [["*********************************以下是" + name + "的评论*********************************",""]]#初始化并给每个景点的评论加上表头 page = 1200 if int(num) > 1200 else int(num)#按照上级要求,每个景点1200条左右评论就行 for i in range(1,(page//10)+1):#逐页获取评论并保存 url = "http://piao.qunar.com/ticket/detailLight/sightCommentList.json?sightId=" + str(rid) + "&index="+ str(i) + "&page=" + str(i) + "&pageSize=10&tagType=0" response = req.get(url) r = json.loads(response.text) if "commentList" in r["data"].keys(): for each in r["data"]["commentList"]: data = []#【评论,评分】 data.append(each["content"]) data.append(each["score"]) if data[0] == "用户未点评,系统默认好评。":#去除无用的评论 continue comments.append(data) print(data[0]) print(data[1]) return comments #保存到本地文件 def save(l): head = ["哪网5A景区的的评论" , "评分" ] df = pd.DataFrame (l , columns = head) df.to_csv ("去哪网.csv", encoding = "utf-8") if __name__ =="__main__": sightid = GetId()#获得景点 id comment = [] for each in sightid: print(each) print(Getrid(sightid[each])[0]) print(Getrid(sightid[each])[1]) co = Getcom(Getrid(sightid[each])[0],Getrid(sightid[each])[1],each) comment.extend(co) print("本次共爬取信息%d条数据"%(len(comment))) save(comment)

    成果展示外加反省

    大概30万条吧,美滋滋.等我开心完就回来,就回来整理出现的问题.欢迎各位大佬批评指正.

    文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

    转载请注明本文地址:https://www.ucloud.cn/yun/41251.html

    相关文章

    • 爬取携程和蚂蜂窝的景点评论数据携程评论数据爬取旅游站数据爬取

      摘要:前言为了获取多源数据需要到各个网站获取一些景点的评论信息和图片,首先选到了携程和蚂蜂窝这两个网站,将一些爬取过程记录下来本人长期出售超大量微博数据旅游网站评论数据,并提供各种指定数据爬取服务,。 前言   为了获取多源数据需要到各个网站获取一些景点的评论信息和图片,首先选到了携程和蚂蜂窝这两个网站,将一些爬取过程记录下来   PS:(本人长期出售超大量微博数据、旅游网站评论数据,并...

      GraphQuery 评论0 收藏0

    发表评论

    0条评论

    wudengzan

    |高级讲师

    TA的文章

    阅读更多
    最新活动
    阅读需要支付1元查看
    <