更新携程网站分析

博主几天前发布的文章,几天后又有了新的解决思路:

完整的代码放在文章最后  用手机端抓取

 

首先请求到这个页面

我们的目标抓取景点名 详情链接  评分  景区等级 门票价格等数据

如果我们选择在主页面(上面这个页面)抓取 景点名和详情链接都可以捕获到,但是有的景区没有评分和等级-----------所以造成的困惑是后期用zip方法处理数据没有办法一一对应,因此我抓到详情链接  然后再通过每一个的详情链接去请求抓取需要的数据

1.先请求主页面得到详情链接

2.通过详情链接去请求子页面

兄弟们大坑来了---------得到的详情链接请求的子页面数据是动态加载的,也就意味着我们没有办法抓到评分等级这类的数据

我是这样做的:

先随便点开一个子链接 按F12 打开抓包工具

 这个包的请求参数 poild 要改变

这个poild可以在详情页链接得到    于是我用正则将他匹配下来,带着他去请求这个url

 这个数据包里只有景区评分和景区等级  没有景区价格   但是景区价格也是同样的方法,先找到这个包,然后带着poild去匹配就可以了

现在需求升级:

我现在需要全国的景区景点  很简单,先检索到全国的    城市id   然后改变参数

只要改变这个参数就可以

城市id我选择从景区景点介入

有大坑来了

这个数据包所返回的是字符串,没有办法用

 返回的数据因为pycharm的原因是个字符串

解决方法:

用正则匹配  代码

momos = re.findall(r'"districtId":(.*?),.*?"districtName":"(.*?)",',data,re.S)

城市id也有了,看我最后的代码

import mysql.connector
import requests
import json
from jsonpath import jsonpath
import sys
import re
import random
import time
from fake_useragent import UserAgent


class XCspider():
    def __init__(self):
        self.randomtime = random.randint(1,2)
        self.UA = UserAgent()
        self.conn = mysql.connector.connect(host='localhost',user='root',password='123456',
                                            database='sjb',auth_plugin='mysql_native_password')
        self.mysql_cursor = self.conn.cursor()
        ip = [
            # '115.209.115.169:4256',
            # '117.93.79.97:4232',
            # '117.87.64.192:4231',
            # '114.99.13.191:4226',
            # '36.6.69.198:4278',
            # '59.58.49.214:4231',
            # '121.61.195.9:4231',
            # '115.229.206.57:4231',
            # '175.162.210.135:4231',
            # '120.35.176.91:4213',
            # '110.230.217.127:4223',
            # '60.173.24.129:4225',
            # '183.92.219.224:4225',
            # '223.156.86.132:4231',
            # '1.199.199.253:4247',
            # '42.59.111.242:4285',
            # '121.226.152.98:4236',
            # '27.157.230.186:4216',
            # '222.77.213.163:4245',
            # '220.168.239.10:4231',
            # '113.218.241.238:4231',
            # '1.49.231.217:4267',
            # '117.95.200.103:4231',
            # '27.44.37.158:4231',
            # '122.241.27.32:4231',
            '113.235.166.147:4278',
            '112.85.232.108:4278',
            '49.88.149.57:4263',
            '106.110.198.7:4236',

                    ]
        self.ip = {
            'https':random.choice(ip)
        }
        self.url = "https://m.ctrip.com/restapi/soa2/18254/json/getAttractionList"
        self.payload = {
          "index": 1,
          "count": 20,
          "sortType": 1,
          "isShowAggregation": True,
          "districtId": 2,
          "scene": "DISTRICT",
          "pageId": "214062",
          "traceId": "1dcf2c53-e847-7d59-c4a9-637959404701",
          "extension": [
            {
              "name": "osVersion",
              "value": "6.0"
            },
            {
              "name": "deviceType",
              "value": "android"
            }
          ],
          "filter": {
            "filterItems": []
          },
          "crnVersion": "2020-09-01 22:00:45",
          "isInitialState": True,
          "head": {
            "cid": "09031137218199825303",
            "ctok": "",
            "cver": "1.0",
            "lang": "01",
            "sid": "8888",
            "syscode": "09",
            "xsid": "",
            "extension": []
          }
        }
        self.headers = {
          'Connection': 'keep-alive',
          'cookieOrigin': 'https://m.ctrip.com',
            # 'User-Agent': random.choice(self.UA),
          'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Mobile Safari/537.36',
          'content-type': 'application/json',
          'Accept': '*/*',
          'Origin': 'https://m.ctrip.com',
          'Sec-Fetch-Site': 'same-origin',
          'Sec-Fetch-Mode': 'cors',
          'Sec-Fetch-Dest': 'empty',
          'Referer': 'https://m.ctrip.com/webapp/you/gspoi/sight/2.html?seo=0&allianceid=4897&sid=130026&isHideNavBar=YES&from=https%3A%2F%2Fm.ctrip.com%2Fwebapp%2Fyou%2Fgsdestination%2Fplace%2F2.html%3Fseo%3D0%26ishideheader%3Dtrue%26secondwakeup%3Dtrue%26dpclickjump%3Dtrue%26allianceid%3D4897%26sid%3D130026%26from%3Dhttps%253A%252F%252Fm.ctrip.com%252Fhtml5%252F',
          'Accept-Language': 'zh-CN,zh;q=0.9',
          'Cookie': 'GUID=09031137218199825303; MKT_CKID=1655441050631.y3cpg.1v7v; _RSG=.mK7Vo8KIkFkJFbXO64ek8; _RGUID=fb92508c-9f1d-4c3e-8ba8-10662194f4ee; _RDG=2894d2e5596bd8261b1bd4f0d138733ac9; _bfaStatusPVSend=1; nfes_isSupportWebP=1; nfes_isSupportWebP=1; _ga=GA1.2.1595398136.1655441061; ibu_h5_lang=en; ibu_h5_local=en-us; StartCity_Pkg=PkgStartCity=25; ibulanguage=CN; ibulocale=zh_cn; cookiePricesDisplayed=CNY; _gid=GA1.2.2020737530.1655798638; MKT_OrderClick=ASID=4897130026&AID=4897&CSID=130026&OUID=&CT=1655883035853&CURL=https%3A%2F%2Fm.ctrip.com%2Fwebapp%2Fyou%2Fgspoi%2Fsight%2F2.html%3Fseo%3D0%26allianceid%3D4897%26sid%3D130026%26isHideNavBar%3DYES%26from%3Dhttps%253A%252F%252Fm.ctrip.com%252Fwebapp%252Fyou%252Fgsdestination%252Fplace%252F2.html%253Fseo%253D0%2526ishideheader%253Dtrue%2526secondwakeup%253Dtrue%2526dpclickjump%253Dtrue%2526allianceid%253D4897%2526sid%253D130026%2526from%253Dhttps%25253A%25252F%25252Fm.ctrip.com%25252Fhtml5%25252F&VAL={"h5_vid":"1655441049907.gadsg"}; Session=smartlinkcode=U130026&smartlinklanguage=zh&SmartLinkKeyWord=&SmartLinkQuary=&SmartLinkHost=; MKT_CKID_LMT=1655959369643; __zpspc=9.8.1655959369.1655959369.1%232%7Cwww.baidu.com%7C%7C%7C%7C%23; _jzqco=%7C%7C%7C%7C1655959370213%7C1.828646019.1655441050624.1655606559937.1655959369657.1655606559937.1655959369657.undefined.0.0.10.10; _bfs=1.1; _RF1=183.253.26.192; appFloatCnt=1; _bfi=p1%3D102001%26p2%3D0%26v1%3D237%26v2%3D0; _bfaStatus=success; _gat=1; MKT_Pagesource=H5; mktDpLinkSource=ullink; _pd=%7B%22r%22%3A20%2C%22d%22%3A253%2C%22_d%22%3A233%2C%22p%22%3A253%2C%22_p%22%3A0%2C%22o%22%3A254%2C%22_o%22%3A1%2C%22s%22%3A255%2C%22_s%22%3A1%7D; _bfa=1.1655441049907.gadsg.1.1655886903531.1655959404092.24.240.214059; _ubtstatus=%7B%22vid%22%3A%221655441049907.gadsg%22%2C%22sid%22%3A24%2C%22pvid%22%3A240%2C%22pid%22%3A%22214059%22%7D; Union=OUID=&AllianceID=4897&SID=130026&SourceID=&createtime=1655959405&Expires=1656564204559; GUID=09031168218403899804'
        }

    # 获取所有城市id 还是通过酒店去抓  获取城市id
    # def cityId(self,a):
    #     # 发送请求
    #     for i in a:
    #         if i == 21880:
    #             continue
    #
    #         url = "https://m.ctrip.com/webapp/hotel/j/hoteldetail/dianping/api/static/city"
    #         headers = {
    #             'Cookie': 'JSESSIONID=C49F4E4E2865153D0814E187AE12B13A; GUID=09031168218403899804'
    #         }
    #         params = {
    #             'oversea': 'false',
    #             # 更换城市id
    #             'index': i,
    #             'pageid': 212092
    #         }
    #
    #         # response = requests.get(url,headers=headers,params=params)
    #         response = requests.get(url,headers=headers,params=params,proxies=self.ip)
    #         print('url为',i)
    #         # print(response.json())
    #         # 解析数据
    #         # 得到所有的城市id
    #         cityId = jsonpath(response.json(),'$..cityId')
    #         print(cityId)
    #         # 遍历取值
    #         for it in cityId:
    #             print(it)
    #             self.payload['index'] = 1
    #             self.payload['districtId'] = it
    #             # 调用方法
    #             self.sendUrl()
    # 从景点找到的城市接口

    def cityID(self):
        url = "https://m.ctrip.com/restapi/soa2/17916/json/invokeOnDemand?_fxpcqlniredt=09031137218199825303&x-traceID=09031137218199825303-1656049564481-6585044"
        payload = {
            "data": "{\"source\":\"destH5\"}",
            "serviceName": "DestinationCoreService.getStaticDistrictCategoryList",
            "head": {
                "cid": "09031137218199825303",
                "ctok": "",
                "cver": "1.0",
                "lang": "01",
                "sid": "8888",
                "syscode": "09",
                "xsid": "",
                "extension": []
            }
        }
        headers = {
            'cookieOrigin': 'https://m.ctrip.com',
            'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Mobile Safari/537.36',
            'content-type': 'application/json',
            'Origin': 'https://m.ctrip.com',
            'Referer': 'https://m.ctrip.com/webapp/you/gsdestination/citySelector/citySelector.html?seo=0&districtId=2&allianceid=4897&sid=155952&isHideNavBar=YES&from=https%3A%2F%2Fm.ctrip.com%2Fwebapp%2Fyou%2Fgsdestination%2Fplace%2F2.html%3Fseo%3D0%26ishideheader%3Dtrue%26secondwakeup%3Dtrue%26dpclickjump%3Dtrue%26allianceid%3D4897%26sid%3D155952%26ouid%3Dindex%26from%3Dhttps%253A%252F%252Fm.ctrip.com%252Fhtml5%252F',
            'Accept-Language': 'zh-CN,zh;q=0.9',
            'Cookie': 'GUID=09031137218199825303; MKT_CKID=1655441050631.y3cpg.1v7v; _RSG=.mK7Vo8KIkFkJFbXO64ek8; _RGUID=fb92508c-9f1d-4c3e-8ba8-10662194f4ee; _RDG=2894d2e5596bd8261b1bd4f0d138733ac9; _bfaStatusPVSend=1; nfes_isSupportWebP=1; nfes_isSupportWebP=1; _ga=GA1.2.1595398136.1655441061; ibu_h5_lang=en; ibu_h5_local=en-us; StartCity_Pkg=PkgStartCity=25; ibulanguage=CN; ibulocale=zh_cn; cookiePricesDisplayed=CNY; _gid=GA1.2.2020737530.1655798638; Session=smartlinkcode=U130026&smartlinklanguage=zh&SmartLinkKeyWord=&SmartLinkQuary=&SmartLinkHost=; MKT_Pagesource=H5; _jzqco=%7C%7C%7C%7C1655959370213%7C1.828646019.1655441050624.1655967880712.1655981364160.1655967880712.1655981364160.undefined.0.0.12.12; __zpspc=9.10.1655981364.1655981364.1%232%7Cwww.baidu.com%7C%7C%7C%25E6%2590%25BA%25E7%25A8%258B%7C%23; appFloatCnt=3; _bfi=p1%3D102001%26p2%3D0%26v1%3D272%26v2%3D0; _bfaStatus=success; MKT_OrderClick=ASID=4897155952&AID=4897&CSID=155952&OUID=index&CT=1655985078165&CURL=https%3A%2F%2Fm.ctrip.com%2Fhtml5%2F%3Fsid%3D155952%26allianceid%3D4897%26ouid%3Dindex&VAL={"h5_vid":"1655441049907.gadsg"}; librauuid=; _RF1=183.253.27.72; mktDpLinkSource=ullink; _pd=%7B%22r%22%3A5%2C%22d%22%3A145%2C%22_d%22%3A140%2C%22p%22%3A146%2C%22_p%22%3A1%2C%22o%22%3A149%2C%22_o%22%3A3%2C%22s%22%3A155%2C%22_s%22%3A6%7D; _bfa=1.1655441049907.gadsg.1.1655977855790.1656049564258.32.291.214059; _ubtstatus=%7B%22vid%22%3A%221655441049907.gadsg%22%2C%22sid%22%3A32%2C%22pvid%22%3A291%2C%22pid%22%3A%22214059%22%7D; Union=OUID=&AllianceID=4897&SID=155952&SourceID=&createtime=1656049564&Expires=1656654364431; GUID=09031168218403899804'
        }
        response = requests.post(url,headers=headers, json=payload)
        # print(response.json())
        data = jsonpath(response.json(),'$..data')[0]
        # print(data)
        momos = re.findall(r'"districtId":(.*?),.*?"districtName":"(.*?)",',data,re.S)
        for a,b in momos:
            # print(a)
            print(b)
            self.payload['districtId'] = a
            self.payload['index'] = 1
            time.sleep(1)
            self.sendUrl()


    # 得到cityId方法返回的url
    def sendUrl(self):

        # 先取两页看看
        # while True:
        for i in range(1,3):
            num = self.payload['index']
            print(f'第{num}页')
            time.sleep(1)
            self.payload['index']=num + 1
            try:
                response = requests.post(self.url, headers=self.headers, json=self.payload,proxies=self.ip)
                # response = requests.post(self.url, headers=self.headers, json=self.payload)
                # 调用方法
                self.jieXi(response.json())
            except:
                # 设置递归深度
                sys.setrecursionlimit(5)
                return self.sendUrl()

    # 通过第一次解析得到的详情页url---去请求详情页 请求详情页链接主要是为了得到 poild
    # 评分 等级 url 通过详情页url解析得到


    # 这个方法是去请求含有 评分和景区等级的url  通过 self.jieXi() 得到链接,然后用正则,得到的poild
    def ziUrl(self,poild):
        try:
            it = self.payload['districtId']
            url = "https://m.ctrip.com/restapi/soa2/18254/json/GetSightOverview"
            payload = json.dumps({
                "useSightExtend": True,
                "districtId": it,
                "scene": "basic",
                "head": {
                    "cid": "09031137218199825303",
                    "ctok": "",
                    "cver": "1.0",
                    "lang": "01",
                    "sid": "8888",
                    "syscode": "09",
                    "xsid": "",
                    "extension": []
                },
                "poiId": poild
            })
            headers = {
                'authority': 'm.ctrip.com',
                'cookieorigin': 'https://m.ctrip.com',
                'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Mobile Safari/537.36',
                'content-type': 'application/json',
                'accept': '*/*',
                'origin': 'https://m.ctrip.com',
                'sec-fetch-site': 'same-origin',
                'sec-fetch-mode': 'cors',
                'sec-fetch-dest': 'empty',
                'referer': 'https://m.ctrip.com/webapp/you/gspoi/sight/2/0.html?poiId=75627&seo=0&isHideNavBar=YES',
                'accept-language': 'zh-CN,zh;q=0.9',
                'cookie': 'GUID=09031137218199825303; MKT_CKID=1655441050631.y3cpg.1v7v; _RSG=.mK7Vo8KIkFkJFbXO64ek8; _RGUID=fb92508c-9f1d-4c3e-8ba8-10662194f4ee; _RDG=2894d2e5596bd8261b1bd4f0d138733ac9; _bfaStatusPVSend=1; nfes_isSupportWebP=1; nfes_isSupportWebP=1; _ga=GA1.2.1595398136.1655441061; ibu_h5_lang=en; ibu_h5_local=en-us; StartCity_Pkg=PkgStartCity=25; ibulanguage=CN; ibulocale=zh_cn; cookiePricesDisplayed=CNY; _gid=GA1.2.2020737530.1655798638; Session=smartlinkcode=U130026&smartlinklanguage=zh&SmartLinkKeyWord=&SmartLinkQuary=&SmartLinkHost=; MKT_CKID_LMT=1655959369643; __zpspc=9.8.1655959369.1655959369.1%232%7Cwww.baidu.com%7C%7C%7C%7C%23; _jzqco=%7C%7C%7C%7C1655959370213%7C1.828646019.1655441050624.1655606559937.1655959369657.1655606559937.1655959369657.undefined.0.0.10.10; _RF1=183.253.26.192; appFloatCnt=1; _bfi=p1%3D102001%26p2%3D0%26v1%3D237%26v2%3D0; _bfaStatus=success; MKT_Pagesource=H5; librauuid=; Union=OUID=&AllianceID=4897&SID=130026&SourceID=&AppID=&OpenID=&exmktID=&createtime=1655963140&Expires=1656567939691; MKT_OrderClick=ASID=4897130026&AID=4897&CSID=130026&OUID=&CT=1655963139698&CURL=https%3A%2F%2Fm.ctrip.com%2Fwebapp%2Fyou%2Fgspoi%2Fsight%2F2.html%3Fseo%3D0%26allianceid%3D4897%26sid%3D130026%26isHideNavBar%3DYES%26from%3Dhttps%253A%252F%252Fm.ctrip.com%252Fwebapp%252Fyou%252Fgsdestination%252Fplace%252F2.html%253Fseo%253D0%2526ishideheader%253Dtrue%2526secondwakeup%253Dtrue%2526dpclickjump%253Dtrue%2526allianceid%253D4897%2526sid%253D130026%2526from%253Dhttps%25253A%25252F%25252Fm.ctrip.com%25252Fhtml5%25252F&VAL={"h5_vid":"1655441049907.gadsg"}; hotelhst=1164390341; _pd=%7B%22r%22%3A18%2C%22d%22%3A289%2C%22_d%22%3A271%2C%22p%22%3A290%2C%22_p%22%3A1%2C%22o%22%3A292%2C%22_o%22%3A2%2C%22s%22%3A293%2C%22_s%22%3A1%7D; _bfa=1.1655441049907.gadsg.1.1655886903531.1655963157778.24.250.214070; _ubtstatus=%7B%22vid%22%3A%221655441049907.gadsg%22%2C%22sid%22%3A24%2C%22pvid%22%3A250%2C%22pid%22%3A214070%7D; GUID=09031168218403899804'
            }
            # response = requests.post(url, headers=headers, data=payload)
            response = requests.post(url, headers=headers, data=payload,proxies=self.ip)
            # print(response.json())
            return response.json()
            # 返回子页面数据
        except:
            sys.setrecursionlimit(5)
            return self.ziUrl(poild)

    # 价格url 这个也是一样的 跟self.ziUrl()一个道理
    def priceUrl(self,poild):
        try:
            it = self.payload['districtId'] # 这个意思是 如果我请求的是北京,那么我下面请求的城市id也必须是北京,要保持一致
            url = "https://m.ctrip.com/restapi/soa2/18254/json/getSightExtendInfo"
            payload = json.dumps({
                "districtId": it,
                "scene": "basic",
                "head": {
                    "cid": "09031137218199825303",
                    "ctok": "",
                    "cver": "1.0",
                    "lang": "01",
                    "sid": "8888",
                    "syscode": "09",
                    "xsid": "",
                    "extension": []
                },
                "poiId": poild
            })
            headers = {
                'authority': 'm.ctrip.com',
                'cookieorigin': 'https://m.ctrip.com',
                'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Mobile Safari/537.36',
                'content-type': 'application/json',
                'accept': '*/*',
                'origin': 'https://m.ctrip.com',
                'sec-fetch-site': 'same-origin',
                'sec-fetch-mode': 'cors',
                'sec-fetch-dest': 'empty',
                'referer': 'https://m.ctrip.com/webapp/you/gspoi/sight/2/0.html?poiId=81728&seo=0&isHideNavBar=YES',
                'accept-language': 'zh-CN,zh;q=0.9',
                'cookie': 'GUID=09031137218199825303; MKT_CKID=1655441050631.y3cpg.1v7v; _RSG=.mK7Vo8KIkFkJFbXO64ek8; _RGUID=fb92508c-9f1d-4c3e-8ba8-10662194f4ee; _RDG=2894d2e5596bd8261b1bd4f0d138733ac9; _bfaStatusPVSend=1; nfes_isSupportWebP=1; nfes_isSupportWebP=1; _ga=GA1.2.1595398136.1655441061; ibu_h5_lang=en; ibu_h5_local=en-us; StartCity_Pkg=PkgStartCity=25; ibulanguage=CN; ibulocale=zh_cn; cookiePricesDisplayed=CNY; _gid=GA1.2.2020737530.1655798638; Session=smartlinkcode=U130026&smartlinklanguage=zh&SmartLinkKeyWord=&SmartLinkQuary=&SmartLinkHost=; MKT_CKID_LMT=1655959369643; __zpspc=9.8.1655959369.1655959369.1%232%7Cwww.baidu.com%7C%7C%7C%7C%23; _jzqco=%7C%7C%7C%7C1655959370213%7C1.828646019.1655441050624.1655606559937.1655959369657.1655606559937.1655959369657.undefined.0.0.10.10; _RF1=183.253.26.192; appFloatCnt=1; _bfi=p1%3D102001%26p2%3D0%26v1%3D237%26v2%3D0; _bfaStatus=success; MKT_Pagesource=H5; Union=OUID=&AllianceID=4897&SID=130026&SourceID=&AppID=&OpenID=&exmktID=&createtime=1655963140&Expires=1656567939691; MKT_OrderClick=ASID=4897130026&AID=4897&CSID=130026&OUID=&CT=1655963139698&CURL=https%3A%2F%2Fm.ctrip.com%2Fwebapp%2Fyou%2Fgspoi%2Fsight%2F2.html%3Fseo%3D0%26allianceid%3D4897%26sid%3D130026%26isHideNavBar%3DYES%26from%3Dhttps%253A%252F%252Fm.ctrip.com%252Fwebapp%252Fyou%252Fgsdestination%252Fplace%252F2.html%253Fseo%253D0%2526ishideheader%253Dtrue%2526secondwakeup%253Dtrue%2526dpclickjump%253Dtrue%2526allianceid%253D4897%2526sid%253D130026%2526from%253Dhttps%25253A%25252F%25252Fm.ctrip.com%25252Fhtml5%25252F&VAL={"h5_vid":"1655441049907.gadsg"}; librauuid=; hotelhst=1164390341; _pd=%7B%22r%22%3A14%2C%22d%22%3A327%2C%22_d%22%3A313%2C%22p%22%3A328%2C%22_p%22%3A1%2C%22o%22%3A330%2C%22_o%22%3A2%2C%22s%22%3A331%2C%22_s%22%3A1%7D; _bfa=1.1655441049907.gadsg.1.1655886903531.1655966576567.25.253.214070; _ubtstatus=%7B%22vid%22%3A%221655441049907.gadsg%22%2C%22sid%22%3A25%2C%22pvid%22%3A253%2C%22pid%22%3A214070%7D; GUID=09031168218403899804'
            }
            # response = requests.post(url, headers=headers, data=payload)

            response = requests.post(url, headers=headers, data=payload,proxies=self.ip)
            return response.json()
        except:
            sys.setrecursionlimit(5)
            return self.priceUrl(poild)

    # 解析景点内容
    def jieXi(self,data):# 解析景点名  链接
        time.sleep(self.randomtime)

        try:
            poiName = jsonpath(data,'$..poiName')
            # 距市中心
            distanceStr = jsonpath(data,'$..distanceStr')
            # xx地区
            displayField = jsonpath(data,'$..displayField')
            detailUrl = jsonpath(data,'$..detailUrl')

            for poiNames,detailUrls,distanceStrs,displayFields in zip(poiName,detailUrl,distanceStr,displayField):
                # print(poiNames)
                # print(detailUrls)
                # 请求详情页内部 抓取相关 评分 等级

                # 这个正则用来匹配 poild
                poild = re.findall(r'https.*?poiId=(.*?)&', str(detailUrls), re.S)[0]

                # 这个方法是返回所有的评分 景区等级
                bbb = self.ziUrl(poild)
                # time.sleep(self.randomtime)

                # 下面这些个异常处理是因为有的景区没有评分,或是没有等级
                # 没有评分,没有等级返回就为 False
                # 所以要手动更改为 '无’

                try: # 评分
                    commentScore = jsonpath(bbb,'$..commentScore')[0]
                    if commentScore == False:
                        commentScore = '无'
                except:
                    commentScore = '无'

                try: # 等级
                    poiLevel = jsonpath(bbb,'$..poiLevel')[0]
                    poiLevel = str(poiLevel)+'A'
                    if poiLevel == False:
                        poiLevel = '无'
                except:
                    poiLevel = '无'

                ccc = self.priceUrl(poild)
                # time.sleep(self.randomtime)

                # 解析价格
                try:
                    price = jsonpath(ccc,'$..price')[0]
                    if price==False:
                        price = '免费'
                except:
                    price = '免费'
                print(poiNames,commentScore,distanceStrs,displayFields,poiLevel,price,detailUrls)
                # 保存
                self.save(poiNames,commentScore,distanceStrs,displayFields,poiLevel,price,detailUrls)

        except:
            # 正常退出
            print('阿巴阿巴阿巴阿巴阿巴阿巴阿巴')
            return self.jieXi(data)


    # 保存内容到数据库
    def save(self,a,b,c,d,e,f,g):
        sql = 'insert into pl(poiName,commentScore,distanceStr,displayField,sightLevelStr,price,detailUrl) values(%s,%s,%s,%s,%s,%s,%s)'
        val = (a,b,c,d,e,f,g)
        self.mysql_cursor.execute(sql,val)
        self.conn.commit()


    # 执行代码
    def start(self):
        # 26个字母以参数的形式进行传入  # 字母 I O V 没有景点 这又是一个大坑
        # 修改列表a即可

        self.cityID()


if __name__ == '__main__':
    aaa = XCspider()
    # aaa.start()
    aaa.cityID()

需求完成

只是请求太过频繁,需要调节请求速度

博主速度不会调

懂行的小伙伴,可以在这里留言,我请你吃棒棒糖,双享棒一块钱的哦(5毛的不吃)

 

咿咿呀呀py
关注 关注
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【无标题】关于携程旅行手机端网站分析
HanBoTou的博客
06-19 966
分析携程网站爬取数据
Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例)
g191913的博客
12-23 6512
Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例)
js解密——携程景点
qq_47828130的博客
03-28 433
携程游记简单js解密
携程火车票单程查询v2
软件开发
11-15 1004
## 携程火车票单程查询v2 ### 1) 请求地址 >https://m.ctrip.com/restapi/soa2/14666/json/TrainGetTransferRouteV2?_fxpcqlniredt=09031078419575776586&x-traceID=09031078419575776586-1636965163954-7608539 ### 2) 调用方式:HTTP post ### 3) 接口描述: * 具体参数 ### 4) 请求参数: ```
2024年8月携程酒店基础信息
最新发布
逸雨清风的专栏 - 血染江山的画,怎敌你眉间一点朱砂
08-08 323
酒店标签:['免费停车', '自助早餐', '棋牌室', '会议厅', '无烟楼层', '干衣机', '下午茶', '免费客房WiFi', '管家服务', '健身室']2024年8月携程酒店全球基础数据130余万家,包含酒店的名称、地址、星级、特色标签、评价数、总评分及子评分、地址、所在街道商圈、与市中心距离、经纬度、城市信息。酒店标签:['儿童托管', '免费停车', '免费客房WiFi', '烧烤', '干衣机', '花园', '室外泳池']酒店名:锦居酒店(成都金融城银泰中心in99店)
干货 | Trip.com QUIC 高可用及性能提升
携程技术
07-16 1605
作者简介章磊,携程高级后端开发工程师,关注网络协议、算法优化、云原生等领域,对开源框架源码、高性能系统设计与优化有浓厚兴趣。团队开放岗位:资深Java开发工程师、Java开发经理本文详细介绍了QUIC协议在携程 Trip.com App上的实践方案,以及团队在QUIC高可用及性能提升方面所做的各类优化。首先介绍了QUIC多进程部署架构,随后分析了QUIC网络架构在生产应用中遇到的问题及其优化方案。...
携程网站分析
12-18
携程网站采用的是1—3—1布局模式,运用DIV+CSS布局,并运用Flash式的导航栏。携程为客户提供全方位的商务及休闲旅行服务,包括酒店预订、机票预订、商旅管理、休闲度假、旅游信息和打折商户。
(1)ping www.baidu.com [ping: unknown host www.baidu.com]---(2)xshell 连接虚拟机问题---(3) 网卡重启失败
hzdxw的专栏
07-19 1万+
---(1)ping www.baidu.com [ping: unknown host www.baidu.com]---(2)xshell 连接虚拟机问题---(3) 网卡重启失败
景点api支持查询携程旅游门票景点详情
weixin_30791095的博客
10-29 657
门票景点详情,景点api支持查询携程旅游门票景点详情。 接口名称:景点api 接口平台:开放api 接口地址:http://api2.juheapi.com/xiecheng/senicspot/ticket/info 支持格式:JSON 请求方式:HTTPPOST/GET 请求示例:http://api2.juheapi.com/xiecheng/senicspot/ticket/...
携程api开发文档.rar
01-29
携程开发平台是为第三方开发者提供的一个集成环境,开发者可以通过注册并获取API密钥,然后在平台上进行接口测试、应用管理、数据分析等一系列操作。平台还可能提供SDK(Software Development Kit),以简化开发...
携程网电子商务案例分析.pdf
10-19
携程网电子商务案例分析携程网,作为中国在线旅行服务行业的领头羊,自1999年成立以来,凭借其独特的商业模式和持续的技术创新,在短短几年内实现了飞速发展。本文将深入剖析携程网的成功之道,探讨其盈利模式...
css+html 携程
08-01
1. **响应式设计**:为了适应不同设备的显示,携程网采用了CSS3的媒体查询(Media Queries),确保网站在手机、平板和桌面电脑上都能呈现良好的视觉效果。 2. **布局管理**:使用Flexbox或Grid布局,可以实现更灵活...
携程旅行网商务模式创新分析.pptx
11-15
携程旅行网商务模式创新分析携程旅行网是中国领先的在线旅行服务公司,成立于1999年,通过将高科技与传统旅游业相结合,为超过5000万会员提供包括酒店预订、机票预订、旅游度假、商旅管理、特约商户及旅游资讯...
携程Redis容器化实践-携程李剑.pdf
05-21
通过上述分析,我们可以看出携程Redis容器化实践不仅解决了原有部署模式中的诸多问题,还极大地提升了系统的可维护性、可扩展性和资源利用率。这一实践不仅适用于携程自身,也为其他面临类似挑战的企业提供了宝贵的...
Docker教程01
Jin的随手笔记
03-23 5869
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
/c6.e3b.biz/index.php,iptv-m3u-maker/tv.m3u8 at d59f4e688e2b4486d6219f094aac886be53c25d2 · srsman/ip...
weixin_29763721的博客
03-23 9446
#EXTINF:-1, group-title="其他频道", Oxigeno90http://i50.letio.com/9102.aac#EXTINF:-1, group-title="其他频道", ProyectoPhttp://149.56.23.143:8200/stream#EXTINF:-1, group-title="其他频道", Report-TVhttp://66.55.93....
获取携程网站上指定景点的用户评论数据
m0_61981943的博客
06-20 1922
本文介绍了如何使用获取数据,包括爬虫的基本原理、爬虫的实现方式、爬虫的应用场景等。通过本文的介绍,读者可以了解到爬虫的工作方式,以及如何使用爬虫获取有用的数据。同时,本文还介绍了一些常用的爬虫工具和技巧,帮助读者更加高效地进行数据爬取。总之,本文为读者提供了一份全面的爬虫入门指南,对于想要学习爬虫的读者来说,是一篇非常有价值的文章。
爬取携程景点评论数据【最新方法】,分析AJAX实现页数跳转的爬取方法
qq_40963692的博客
05-21 6431
本文仅供技术学习使用,欢迎转载,转载请注明出处 因为朋友参加数学建模,需要景点数据,而我刚好懂一点点,就帮他写爬虫代码。在网上搜索到一些爬虫方法,但在获取景点ID时,发现现在携程的Request Payload参数发生变化,导致原本的一些参数,如翻页的请求Fetch,景点ID:viewid没有了,经过分析发现使用了poiID作为新的参数,故自己重新针对新的接口参数重新写了爬虫,同时对爬取通过ajax实现的翻页的数据进行总结,如有错误,还望包涵并指出! PS:携程原本的接口参数还是能正常使用,也可以.
Python网络爬虫实战:爬取携程网酒店评价信息
热门推荐
亮出锋芒,剑指苍穹
10-29 2万+
这个爬虫是在一个小老弟的委托之下写的。 他需要爬取携程网上的酒店的评价数据,来做一些分词和统计方面的分析,然后来找我帮忙。 爬这个网站的时候也遇到了一些有意思的小麻烦,正好整理一下拿出来跟大家分享一下。 这次爬取过程稍微曲折,各种碰壁,最终成功的过程,还是有点意思。 所以本文我会按照自己当时爬取的思路来讲述,希望能给大家一些思路上的启发。 分析部分略长,如果赶时间可以直接拉到最下面,...
携程潘斐斐:移动网站优化实战,实时监测与性能提升策略
3. 技术架构分析:演讲中对比了传统PC网站与移动设备的架构差异,指出移动网站可能涉及Web App、Hybrid App以及浏览器、静态资源服务器、数据服务器等多个组件。通过LizardFramework这样的前端框架和RESTful API,...
写文章

热门文章

  • 更新携程网站分析 2070
  • 【无标题】关于携程旅行手机端网站分析: 966

最新评论

  • 【无标题】关于携程旅行手机端网站分析:

    CSDN-Ada助手: 推荐 网络 技能树:https://edu.csdn.net/skill/network?utm_source=AI_act_network

大家在看

  • Golang | Leetcode Golang题解之第485题最大连续1的个数
  • 被网络诈骗怎么报案,了解110报案过程?
  • C语言 | Leetcode C语言题解之第485题最大连续1的个数
  • 问:JVM中对象是怎么分‘宿舍’的? 299
  • 基于 WinForms 实现人物卡通化的 C# 项目示例 633

最新文章

  • 【无标题】关于携程旅行手机端网站分析:
2022年2篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳坪山网站建设公司台州网站优化托管优化网站需要什么重点南通营销型网站优化方案沧州网站搜索优化排名哪家好襄阳怎么优化网站网站 优化网站优化细节网站网络优化外包四川网站优化价格网站排名优化忄金苹果下拉讠四川好的网站关键词优化章丘济南网站建设优化低价机械行业网站优化洛阳网站优化宁波本地网站优化哪家好网站优化的必要性怎么做宜都网站排名优化上海网站制作+优化360网站优化检测工具网站怎么优化妥当易速达诸城网站建设推广优化内蒙网站快速优化江门优化型外贸网站建设网站优化服务商网站优化推广方案示范seo网站优化服务湖北网站优化软件普陀区官网网站优化机构英山网站优化山东网站优化公司山东聚搜科技香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化