• 吴裕雄--天生自然PYTHON爬虫:爬取某一大型电商网站的商品数据(优化)


    本博文主要是对我的这篇:https://www.cnblogs.com/tszr/p/12193744.html爬取某一大型电商网站的商品数据博文代码的优化和整理。

    代码优化可以提高代码的可读性。

    import time
    import json
    import pymongo
    import requests
    import urllib.request
    
    #使用MongoDB创建数据库、表
    client = pymongo.MongoClient('localhost',27017)
    book_qunar = client['qunarr']
    sheet_qunar_zyx = book_qunar['qunar_zyxx']
    
    def get_list(dep,item):
        url = 'https://touch.dujia.qunar.com/list?modules=list%2CbookingInfo%2CactivityDetail&dep={}&query={}&dappDealTrace=true&mobFunction=%E6%89%A9%E5%B1%95%E8%87%AA%E7%94%B1%E8%A1%8C&cfrom=zyx&it=dujia_hy_destination&date=&needNoResult=true&originalquery={}&limit=0,24&includeAD=true&qsact=search'.format(urllib.request.quote(dep),urllib.request.quote(item),urllib.request.quote(item))
        time.sleep(3)
        strhtml = requests.get(url)
        #获取当前目的地的产品数量
        routeCount = int(strhtml.json()['data']['limit']['routeCount'])
        for limit in range(0,routeCount,24):
            url = 'https://touch.dujia.qunar.com/list?modules=list%2CbookingInfo%2CactivityDetail&dep={}&query={}&dappDealTrace=true&mobFunction=%E6%89%A9%E5%B1%95%E8%87%AA%E7%94%B1%E8%A1%8C&cfrom=zyx&it=dujia_hy_destination&date=&needNoResult=true&originalquery={}&limit={},24&includeAD=true&qsact=search'.format(urllib.request.quote(dep),urllib.request.quote(item),urllib.request.quote(item),limit)
            time.sleep(3)
            strhtml = requests.get(url)
            #用一个字典保存当前这个产品的信息
            result = {
                        'date':time.strftime('%Y-%m-%d',time.localtime(time.time())),
                        'dep':dep,
                        'arrive':item,
                        'limit':limit,
                        'result':strhtml.json()
                    }
            #向数据库中插入这条产品信息记录
            sheet_qunar_zyx.insert_one(result)
            
    def get_json(url):
        strhtml = requests.get(url)
        time.sleep(3)
        return strhtml.json()
    
    if __name__ == '__main__':
        #获取产品
        url = 'https://touch.dujia.qunar.com/depCities.qunar'
        strhtml = requests.get(url)
        dep_dict = strhtml.json()
        for dep_item in dep_dict['data']:
            for dep in dep_dict['data'][dep_item]:
                #这里声明一个列表a用来保存当前这个出发点对应的所有目的地
                a = []
                url = 'https://touch.dujia.qunar.com/golfz/sight/arriveRecommend?dep={}&exclude=&extensionImg=255,175'.format(urllib.request.quote(dep))
                time.sleep(3)
                strhtml = requests.get(url)
                arrive_dict = strhtml.json()
                for arr_item in arrive_dict['data']:
                    for arr_item_1 in arr_item['subModules']:
                        for query in arr_item_1['items']:
                            #如果当前这个目的地不在a中的话,那就添加进去,否则不添加,这样就可以达到目的地去重的目的了
                            if(query['query'] not in a):
                                a.append(query['query'])
                #逐个地取出当前出发点对应的目的地item
                for item in a:
                    get_list(dep,item)
                    
    #再写一个程序用来定时监控运行结果
    while True:
        print(sheet_qunar_zyx.find().count())
        time.sleep(10)
    #再写一个程序用来定时监控运行结果(新建一个文件)来运行,记得要导入对应的文件
    while True:
        print(sheet_qunar_zyx.find().count())
        time.sleep(10)

  • 相关阅读:
    6-4.粗体标签
    [Unity3D] 如何实现点击按钮退出游戏
    [Unity3D] 载入游戏地图时背景图片随机切换 & 数字百分比进度条
    [Unity3D] 鼠标点击图片移动效果
    [3DMAX]如何将骨骼与模型绑定在一起(蒙皮) & 如何实现自动化人物模型蒙皮
    [Unity 3D]用鼠标滚轮实现镜头放大和缩放,并添加距离限制
    [Unity3D] 如何实现围绕旋转
    [Unity3D] 如何实现注视旋转
    Css 图片自适应
    Scss 定义内层class的简单写法
  • 原文地址:https://www.cnblogs.com/tszr/p/12198054.html
Copyright © 2020-2023  润新知