趴一趴京东的Ajax动态价格页面
AJAX,异步加载技术!!!
之前在网上看过很多朋友有一种疑问,为什么在看京东网页的源代码里面看不到价格或则折扣一类的数据,而在网页上正常显示却能看到?。。。之前我也没有想到是AJAX,因为我写写爬虫只是业余爱好吧~~,后来有一次用chrome抓包的时候发现网页加载完成但是其还在刷新数据,突然恍然大悟!!!AJAX,之前看过一篇帖子的很多朋友都在问京东网页的源代码里面看不到价格的数据,如果您是查找这个问题的读者,恭喜您,找对地方了!!!
AJAX
AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是一种异步加载技术,那么,怎么才能抓到AJAX异步加载可以的request叻?好吧,这里只有细心的观察了,就像一个小偷一样的~宅在电脑前,偷偷地~偷偷滴~观察
是的就是这个链接,http://p.3.cn/prices/mgets?skuIds=J_xxxxxx,,只要你在后面输入商品的id,你就能查询到商品的折扣价格和正价,这点京东做的一点儿都不好,这个请求居然还是HTTP的GET请求,如果京东内部网络层的工作人员看到这里,你们也改进改进吧,,毕竟这是你们自己的数据呀~好吧,有了这个url,看到这里的大家,估计思路也已经出来了~~
爬虫实现基本思路
本爬虫使用的是scrapy,是一个定向爬虫,当然~好像还没有爬不到的数据,在我的理念里,只要能看到的数据,都能爬取~哈~本篇文章不会讲解scrapy的用法,之后有时间会我会写一写scrapy的基本使用方法~
Itme
#排名
number = scrapy.Field()
#图书名字
bookName = scrapy.Field()
#作者
author = scrapy.Field()
#出版社
press = scrapy.Field()
#图书id
BookID = scrapy.Field()
#正价
price = scrapy.Field()
#折扣价
PreferentialPrice = scrapy.Field()
小爬虫主体
小爬虫的脑袋~
设置开始的链接start_urls和构造一个入口def parse(self, response)
我用的是xpath来寻找节点,主要抓取每一个商品的全部信息,应该其都在一个li标签里,看图~不明白,就看图~
一个li标签就代表一个商品,还是看不懂的话自己琢磨去吧~
小爬虫的身体~
现在就是根据需求,用xpath来匹配每一个需要的数据吧~这里没什么技术含量,不做过多的讲解。如果不懂xpath或则正则的小伙伴们,自己去研究吧~有一天你也会变成大神的哦~
小爬虫的触须~AJAX异步加载请求~
首先获取id构造url
json_url = 'http://p.3.cn/prices/mgets?skuIds=J_' + BookID
正则表达式匹配出来要得到的字典
r = requests.get(json_url).text
data = json.loads(r)[0]
提取价格和折扣价格
price = data['m']
PreferentialPrice = data['p']
小爬虫的消化系统~
yield item在python中yield的用法是很神奇而美妙的,在这里也不做过多讲解,以后有时间我会写更多的关于python基本语法的文章分享
小爬虫~爬来爬去爬上爬下~
获取下一页的href,然后创建一个递归函数,爬来爬去爬上爬下~
yield Request(nextLink,callback=self.parse)
小爬虫的启动装置
不好意思,MAC的小伙伴在终端是跑步起来的,WIN系统的小伙伴有福了~能执行,也就是main文件的命令,具体怎么操作,问度娘~
from scrapy import cmdline
cmdline.execute("scrapy crawl JDSpider".split())
小爬虫诞生~
Ok,看看效果吧~
小爬虫准本就绪
开始爬取~正在激烈的爬取~
爬取结束~生成一坨~一坨~一坨~那啥吧~
小爬虫使用小提示~
- scrapy crawl JDSpider,,最后加的是爬虫name,而不是项目名字~
- 生成的CSV文件可能是乱码,请用可以更改编码格式的工具更改编码格式并保存~
- 需要的环境自己配置,跑不起来报错,请百度,爬虫笔者已经亲测,可以跑~
- 本爬虫没有设置代理,因为用于学习交流吧~
- 本爬虫已经更改请求头里的USER_AGENT,请改为自己的吧
趴一趴京东的Ajax动态价格页面的更多相关文章
- Jquery书写AJAX动态向页面form传数据,清空之前的数据
三种方式: 直接代码: 1.$("#mytable tr:gt(0)").remove(); 2.$("#mytable tr:not(:first)").em ...
- echarts在.Net中使用实例(二) 使用ajax动态加载数据
通过上一篇文章可以知道和echarts参考手册可知,series字段就是用来存储我们显示的数据,所以我们只需要用ajax来获取series的值就可以. option 名称 描述 {color}back ...
- 11月10日上午ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库
1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...
- 表单验证:$tablePrefix(定义表前缀);$trueTableName = 'yonghu',找到真实表名(yonghu)表;create($attr,0)两个参数;批量验证(返回数组);ajax+动态验证表单
*$tablePrefix是定义在Model中的,优先级大于配置文件中,如果项目中表前缀全部比如为"a_",并且在配置文件中定义了 'DB_PREFIX'=>'a_' 后期如 ...
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
博客分类: jquery-easyui jQueryAjax框架HTML 现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...
- ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库
1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...
- 使用PHP中的ajax做登录页面、验证用户名是否可用、动态调用数据库
1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...
- 解决jQuery ajax动态新增节点无法触发点击事件的问题
在写ajax加载数据的时候发现,后面添加进来的demo节点元素,失去了之前的点击事件.为什么点击事件失效,我们该怎么去解决呢? 其实最简单的方法就是直接在标签中写onclick="" ...
- 14.ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库
1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...
随机推荐
- 响应式布局(Responsive Layout)/流式布局(Fluid Layout)/自适应布局(Adaptive)
1.使用媒体查询来适应不同视口的固定宽度设计,例如bootstrap的container类. 2.将固定像素布局转换成灵活的百分比布局,才能让页面元素根据视口大小在一个又一个媒体查询间伸缩修正样式. ...
- input美化问题
对于前端来说,一个比较大的问题是,当HTML提供的最原始的控件长的很丑可是又没有相应的属性去更改,碰到这个问题时我们应该怎么办?比如radio的那个单选框我觉得好丑啊,怎么办呢?一个很好的思路就是把它 ...
- 在Java中,你真的会日期转换吗
1.什么是SimpleDateFormat 在java doc对SimpleDateFormat的解释如下: SimpleDateFormat is a concrete class for form ...
- HDU 1256 画8 (找规律)
题目链接 Problem Description 谁画8画的好,画的快,今后就发的快,学业发达,事业发达,祝大家发,发,发. Input 输入的第一行为一个整数N,表示后面有N组数据. 每组数据中 ...
- 记一次诡异的bug调试——————关于JDK1.7和JDK1.8中HashSet的hash(key)算法的区别
现象: 测试提了一个bug,我完全复现不了,但是最吊诡的是在其他人的机器上都可以复现.起初以为是SVN合并后出现的冲突,后来经过对比法排查: step 1: 我本地开两个jetty,一个跑合并之前的版 ...
- VC调用易语言DLL
易语言方面: .版本 .子程序 show, , 公开 ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中. ***注意不 ...
- 蓝色的oa模板html_综合信息服务管理平台OA模板——后台
链接:http://pan.baidu.com/s/1qXGGOAK 密码:2otu
- Linux进程调度原理【转】
转自:http://www.cnblogs.com/zhaoyl/archive/2012/09/04/2671156.html Linux进程调度的目标 1.高效性:高效意味着在相同的时间下要完成更 ...
- keepalived主备切换后的arp问题【转】
使用keepalived的时候主机挂了,备机显示绑定了VIP.但是此时实际还是不能访问.其实就是网关的arp缓存没有刷新. 在服务器上执行一下就行了 arping -I eth0 -c 5 -s ...
- 实现UE添加自定义按钮之添加菜单
1.ueditor.config.js配置文件中配置 2.在ueditor.all.js配置文件中配置点开的的弹框位置 3.在ueditor1_4_3-utf8-jsp\themes\default\ ...