python爬虫笔记2
时间:2019-11-02
本文章向大家介绍python爬虫笔记2,主要包括python爬虫笔记2使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
学习任务
获取去哪儿网的出发地列表
获取旅游景点列表
获取景点产品列表
存储数据
1 获取出发地站点
(1)访问touch.qunar.com
(2)按F12,单击自由行,在自由行页面点击搜索框
(3)单击任意一个城市,切换到headers,查看request URL如下所示。但是需要工具还原编码咋们才能知道这是啥(dep参数表示出发地,query表示目的地)。推荐网站http://www.jsons.cn/urlencode/,解码效果下面图2
3 实现
(1)首先获得出发地站点,因为最终需要获得整个自由行的产品列表。
自由行首页中点击左侧的出发点站点,然后获取目标URL如图二
1 import requests 2 url="https://touch.dujia.qunar.com/depCities.qunar" 3 4 5 strhtml=requests.get(url) 6 print(strhtml) 7 dep_dict=strhtml.json() 8 print(dep_dict) 9 for dep_item in dep_dict['data']: 10 for dep in dep_dict['data'][dep_item]: 11 print(dep)
(2)获得目的地。根据上面的分析,json工具解码以后通过拼接可得URL。
1 url = 'https://m.dujia.qunar.com/golfz/sight/arriveRecommend?dep={}&exclude=&extensionImg=255,175'.format(urllib.request.quote(dep))
(3)总源码
1 import requests 2 import urllib 3 import time 4 #import pymongo 5 6 # client=pymongo.MongoClient('localhost',27017) 7 # book_qunar=client['qunar'] 8 # sheet_qunar_zyx=book_qunar['qunar_zyx'] 9 10 #获取产品列表 11 def get_list(dep,item): 12 url = 'https://touch.dujia.qunar.com/list?modules=list,bookingInfo&dep={}&query={}&mtype=all&ddt=false&mobFunction=%E6%89%A9%E5%B1%95%E8%87%AA%E7%94%B1%E8%A1%8C&cfrom=zyx&it=FreetripTouchin&et=FreetripTouch&date=&configDepNew=&needNoResult=true&originalquery={}&limit=0,20&includeAD=true&qsact=search'.format( 13 urllib.request.quote(dep), urllib.request.quote(item), urllib.request.quote(item)) 14 strhtml = get_json(url) 15 try: 16 routeCount = int(strhtml['data']['limit']['routeCount']) 17 except: 18 return 19 for limit in range(0, routeCount, 20): 20 url = 'https://touch.dujia.qunar.com/list?modules=list,bookingInfo&dep={}&query={}&mtype=all&ddt=false&mobFunction=%E6%89%A9%E5%B1%95%E8%87%AA%E7%94%B1%E8%A1%8C&cfrom=zyx&it=FreetripTouchin&et=FreetripTouch&date=&configDepNew=&needNoResult=true&originalquery={}&limit={},20&includeAD=true&qsact=search'.format( 21 urllib.request.quote(dep), urllib.request.quote(item), 22 urllib.request.quote(item), limit) 23 strhtml = get_json(url) 24 result = { 25 'date': time.strftime('%Y-%m-%d', time.localtime(time.time())), 26 'dep': dep, 27 'arrive': item, 28 'limit': limit, 29 'result': strhtml 30 } 31 #sheet_qunar_zyx.insert_one(result) 32 print(result) 33 34 # def connect_mongo(): 35 # client=pymongo.MongoClient('localhost',27017) 36 # book_qunar=client['qunar'] 37 # return book_qunar['qunar_zyx'] 38 39 40 def get_json(url): 41 strhtml=requests.get(url) 42 time.sleep(1) 43 return strhtml.json() 44 45 if __name__ == "__main__": 46 47 url='https://touch.dujia.qunar.com/depCities.qunar' 48 dep_dict=get_json(url) 49 #这里是json格式 dep_dict中内嵌勒一层 50 for dep_item in dep_dict['data']: 51 for dep in dep_dict['data'][dep_item]: 52 a = []#目的地去重 53 #经过解码工具可以得到dep表示出发地 query和originalquery表示目的地 54 url = 'https://m.dujia.qunar.com/golfz/sight/arriveRecommend?dep={}&exclude=&extensionImg=255,175'.format(urllib.request.quote(dep)) 55 arrive_dict = get_json(url) 56 for arr_item in arrive_dict['data']: 57 for arr_item_1 in arr_item['subModules']: 58 for query in arr_item_1['items']: 59 if query['query'] not in a: 60 a.append(query['query']) 61 for item in a: 62 get_list(dep,item)
原文地址:https://www.cnblogs.com/lanjianhappy/p/11783932.html
- hbase源码系列(十一)Put、Delete在服务端是如何处理?
- 大数据如何帮飞机节油?
- hbase源码系列(十二)Get、Scan在服务端是如何处理?
- OpenStack:建立虚拟的渗透测试实验环境 – 网络篇
- Kettle 添加对应hadoop版本的支持
- Layui常用方法
- 使用Identity Server 4建立Authorization Server (4)
- 使用Identity Server 4建立Authorization Server (3)
- 使用Identity Server 4建立Authorization Server (2)
- 使用Identity Server 4建立Authorization Server (1)
- Java之异常处理
- 挖洞经验 | 看我如何利用SAML漏洞实现Uber内部聊天系统未授权登录
- 使用ichartjs生成图表
- 使用angular4和asp.net core 2 web api做个练习项目(四)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python批量移动文件&重命名代码分享
- [DeeplearningAI 笔记]第一章2.11-2.16 向量化与 python/numpy 向量说明
- 自己动手作图深入理解二叉树、满二叉树及完全二叉树
- Matlab矩阵加入新元素
- 每个Python程序员都应该知道的10个缩写
- 《剑指offer》第九天:斐波那契数列
- [tensorflow损失函数系列]sigmoid_cross_entropy_with_logits
- 0794-5.16.2-Hive和Imapla查询decimal类型结果不同异常
- 利用TFRecords存储于读取带标签的图片
- matlab sum函数
- [tensorflow损失函数系列]softmax_cross_entropy_with_logits
- RESTful API 设计最佳实践
- Spring 是如何解决循环依赖的?
- 移动webhead参数
- 看了这篇泛型,下次设计链表别傻傻的用int 表示node节点的值了