吴裕雄--天生自然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)

猜你喜欢

转载自www.cnblogs.com/tszr/p/12198054.html