Objetivo: obter toda a lista de produtos de "viagens grátis"
Necessidade de usar links e sites:
Site de comércio eletrônico:https://www.qunar.com/
Conversão de codificação online:https://tool.oschina.net/encode?type=4
A seguir está o link obtido pela observação e análise dos dados (a primeira parte):
Destino correspondente à origem: https://touch.dujia.qunar.com/golfz/sight/arriveRecommenddep=%E5%8C%97%E4%BA%AC&exclude=&extensionImg=255,175
Link para a lista de pontos de partida:
https://touch.dujia.qunar.com/depCities.qunar
Produtos do ponto de partida ao destino:
https://touch.dujia.qunar.com/list?modules=list%2CbookingInfo%2CactivityDetail&dep=%E5%8C%97%E4%BA%AC&query=%E4%B8%89%E4%BA%9A%E8%87%AA%E7%94%B1%E8%A1%8C&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=%E4%B8%89%E4%BA%9A%E8%87%AA%E7%94%B1%E8%A1%8C&width=480&height=320&quality=90&limit=0,20&includeAD=true&qsact=search&filterTagPlatform=mobile_touch
Um: observe as características da página e analise os dados
Acesso no navegador:https://www.qunar.com/
Pressione F12 para entrar no modo de desenvolvedor
Em seguida, pressione ctrl + shift + m (ou círculo vermelho no diagrama de pontos)
Agora ele entra no modo de terminal sem fio e os dados retornados pelo terminal sem fio estão no formato JSON , que é mais fácil de processar.
(1) Após clicar em " Viagem Grátis ", e em seguida clicar na caixa de pesquisa , é possível observar a estrutura em árvore , conforme mostrado na figura abaixo
(2) Mudar para apáginado cabeçalho , existem duas informações importantes (circuladas em vermelho)
Request URL (request link) : acesse o servidor pelo link para obter os dados
Método de solicitação : determine o método de função e os parâmetros de upload a serem usados. Os métodos de solicitação comuns incluem os métodos GET e POST .
Entre eles: O
método GET tem autoridade apenas para consultar dados , e os dados podem ser retornados desde que a URL seja acessada ;
O método POST requer verificação de autorização e conteúdo da solicitação . O servidor passa a autorização e retorna os dados solicitados pelo cliente por meio do conteúdo da solicitação . O método POST tem autoridade para consultar e modificar os dados .
Pode desenhar:
Solicitar URL (solicitar link) excluir o seguinte retorno de chamada :https://touch.dujia.qunar.com/golfz/sight/arriveRecommend?dep=%E5%8C%97%E4%BA%AC&exclude=&extensionImg=255,175
Método de solicitação : método GET
(3) Sinta-se à vontade para clicar em uma cidade recomendada (Sanya pode clicar aqui)
Observe a URL de solicitação , a string no início de% no link é uma string compilada em chinês. O servidor não pode reconhecer caracteres chineses, portanto, ela pode ser enviada ao servidor após ser compilada em uma determinada codificação.
Transcodificação de linha aberta para decodificar
https://touch.dujia.qunar.com/list?modules=list%2CbookingInfo%2CactivityDetail&dep=%E5%8C%97%E4%BA%AC&query=%E4%B8%89%E4%BA%9A%E8%87%AA%E7%94%B1%E8%A1%8C&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=%E4%B8%89%E4%BA%9A%E8%87%AA%E7%94%B1%E8%A1%8C&width=480&height=320&quality=90&limit=0,20&includeAD=true&qsact=search&filterTagPlatform=mobile_touch
O link decodificado pode ser encontrado comparando com a página de navegação
dep = Pequim ( local de partida )
consulta = viagem grátis Sanya ( destino )
originalquery = viagem grátis Sanya ( destino )
(4) Se você deseja obter todos os produtos de "viagens grátis", deve primeiro obter todos os pontos de partida, porque partindo de cidades diferentes, haverá produtos diferentes.
Escolha um local de partida:
Encontre a lista de partida
Obtenha o link para a lista de pontos de partida:
https://touch.dujia.qunar.com/depCities.qunar
Dois: análise do fluxo de trabalho
(1) Obtenha a lista de pontos de partida
(2) Obtenha uma lista de atrações turísticas
(3) Obtenha uma lista de produtos clássicos
(4) Armazenar dados
Três: construir uma árvore de categorias
(1) Obtenha a lista de pontos de partida
Árvore:
import requests
url = 'https://touch.dujia.qunar.com/depCities.qunar' #出发点列表的链接
str = requests.get(url)
dep_dic = str.json()
for dep_item in dep_dic["data"]:
for dep in dep_dic["data"][dep_item]:
print(dep)
resultado da operação:
(2) Obtenha uma lista de atrações turísticas
Obtenha o destino com base no local de partida e continue a inserir o código.
Árvore:
import requests
import time
url = 'https://touch.dujia.qunar.com/depCities.qunar' #出发点列表的链接
str = requests.get(url)
dep_dic = str.json()
for dep_item in dep_dic["data"]:
for dep in dep_dic["data"][dep_item]:
print(dep)
#新加入的代码
url = 'https://touch.dujia.qunar.com/golfz/sight/arriveRecommend?dep={}&exclude=&extensionImg=255,175'.format(dep)
time.sleep(1)
str = requests.get(url)
arrive_dic = str.json()
arrive_city = [] #存放当前出发点能到的所有目的地
for arr_item in arrive_dic["data"]:
for arr_item_1 in arr_item["subModules"]:
for query in arr_item_1["items"]:
if query["query"] not in arrive_city: #使得当前出发点对应的目的地不重复
arrive_city.append(query["query"])
print(arrive_city)
resultado da operação:
Quatro: Obtenha a lista de produtos
import requests
import time
import pymongo
client = pymongo.MongoClient('localhost',27017) #建立连接
book_qunar = client['qunar'] #建立名为“qunar” 的数据库
sheet_qunar = book_qunar['sheet_qunar'] #在数据库中创建新表 “sheet_qunar”
url = 'https://touch.dujia.qunar.com/depCities.qunar' #出发点列表的链接
str = requests.get(url)
dep_dic = str.json()
for dep_item in dep_dic["data"]:
for dep in dep_dic["data"][dep_item]:
print(dep)
url = 'https://touch.dujia.qunar.com/golfz/sight/arriveRecommend?dep={}&exclude=&extensionImg=255,175'.format(dep)
time.sleep(1)
str = requests.get(url)
arrive_dic = str.json()
arrive_city = [] #存放当前出发点能到的所有目的地
for arr_item in arrive_dic["data"]:
for arr_item_1 in arr_item["subModules"]:
for query in arr_item_1["items"]:
if query["query"] not in arrive_city: #使得当前出发点对应的目的地不重复
arrive_city.append(query["query"])
for item in arrive_city:
url = 'https://touch.dujia.qunar.com/' \
'list?modules=list%2CbookingInfo%2' \
'CactivityDetail&dep={}&query={}&' \
'dappDealTrace=true&mobFunction=%E' \
'6%89%A9%E5%B1%95%E8%87%AA%E7%94%B1' \
'%E8%A1%8C&cfrom=zyx&it=dujia_hy_dest' \
'ination&date=&needNoResult=true&origina' \
'lquery={}&width=480&height' \
'=320&quality=90&limit=0,' \
'20&includeAD=true&qsact=search&' \
'filterTagPlatform=mobile_touch'.format(dep,item,item)
time.sleep(1)
str = requests.get(url)
routeCount = int(str.json()["data"]["limit"]["routeCount"]) #取出产品数
for limit in range(0,routeCount,20): #获取产品信息
url = 'https://touch.dujia.qunar.com/' \
'list?modules=list%2CbookingInfo%2' \
'CactivityDetail&dep={}&query={}&' \
'dappDealTrace=true&mobFunction=%E' \
'6%89%A9%E5%B1%95%E8%87%AA%E7%94%B1' \
'%E8%A1%8C&cfrom=zyx&it=dujia_hy_dest' \
'ination&date=&needNoResult=true&origina' \
'lquery={}&width=480&height' \
'=320&quality=90&limit={},' \
'20&includeAD=true&qsact=search&' \
'filterTagPlatform=mobile_touch'.format(dep,item,item,limit)
time.sleep(1)
str = requests.get(url)
#产品的数据类型
result = {
'date': time.strftime('%Y-%m-%d',time.localtime(time.time())),
'dep': dep,
'arrive': item,
'limit': limit,
'result': str.json()
}
sheet_qunar.insert_one(result)
resultado da operação: