放养的小爬虫-京东定向爬虫(AJAX获取价位数据)

放养的小爬虫--京东定向爬虫(AJAX获取价格数据)

放养的小爬虫--京东定向爬虫(AJAX获取价格数据)

笔者声明:只用于学习交流,不用于其他途径。源代码已上传github。githu地址:https://github.com/Erma-Wang/Spider
笔者声明:只用于学习交流,不用于其他途径。源代码已上传github。githu地址:https://github.com/Erma-Wang/Spider
笔者声明:只用于学习交流,不用于其他途径。源代码已上传github。githu地址:https://github.com/Erma-Wang/Spider

重要的事情说三遍~~~!!!只用于学习交流,私自用于其他途径,后果自负!!!
github源代码地址https://github.com/Erma-Wang/Spider(注意,本仓库还有其他的小爬虫,本文章讲解的是JDSpider···),别忘了给个star哦@、@
***

Python很强大,50行不到的爬虫代码实现京东定向爬虫,虽然其他语言也可以实现,但是个人还是喜欢Python做做小爬虫,笔者iOS开发,曾用OC写过爬虫,苹果高度封装OC语言和强大的第三方库也不能敌当过Python的便捷!!!好吧,说说爬虫实现的基本思路吧,还有AJAX。。。

AJAX,异步加载技术!!!

之前在网上看过很多朋友有一种疑问,为什么在看京东网页的源代码里面看不到价格或则折扣一类的数据,而在网页上正常显示却能看到?。。。之前我也没有想到是AJAX,因为我写写爬虫只是业余爱好吧~~,后来有一次用chrome抓包的时候发现网页加载完成但是其还在刷新数据,突然恍然大悟!!!AJAX,之前看过一篇帖子的很多朋友都在问京东网页的源代码里面看不到价格的数据,如果您是查找这个问题的读者,恭喜您,找对地方了!!!

AJAX

AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是一种异步加载技术,那么,怎么才能抓到AJAX异步加载可以的request叻?好吧,这里只有细心的观察了,就像一个小偷一样的~宅在电脑前,偷偷地~偷偷滴~观察。。。。。。好吧,下面直接贴上详图吧~
放养的小爬虫-京东定向爬虫(AJAX获取价位数据)
是的就是这个链接,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标签里,看图~不明白,就看图~
放养的小爬虫-京东定向爬虫(AJAX获取价位数据)
一个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,看看效果吧~

小爬虫准本就绪

放养的小爬虫-京东定向爬虫(AJAX获取价位数据)

开始爬取~正在激烈的爬取~

放养的小爬虫-京东定向爬虫(AJAX获取价位数据)

爬取结束~生成一坨~一坨~一坨~那啥吧~

放养的小爬虫-京东定向爬虫(AJAX获取价位数据)

看看成果吧~

放养的小爬虫-京东定向爬虫(AJAX获取价位数据)

小爬虫使用小提示~

  • scrapy crawl JDSpider,,最后加的是爬虫name,而不是项目名字~
  • 生成的CSV文件可能是乱码,请用可以更改编码格式的工具更改编码格式并保存~
  • 需要的环境自己配置,跑不起来报错,请百度,爬虫笔者已经亲测,可以跑~
  • 本爬虫没有设置代理,因为用于学习交流吧~
  • 本爬虫已经更改请求头里的USER_AGENT,请改为自己的吧
  • 最后项目已经上传到github,github源代码地址https://github.com/Erma-Wang/Spider(注意,本仓库还有其他的小爬虫,本文章讲解的是JDSpider···),别忘了给个star哦@、@
  • 还要了解更多的小爬虫的朋友们可以关注本博,并在本博的spider中找到其他的小爬虫,笔者会定时更新小爬虫的~

重要的事情再说三遍:

本文和本爬虫只用于学习交流,不用于其他途径,后果自负~!~!

本文和本爬虫只用于学习交流,不用于其他途径,后果自负~!~!

本文和本爬虫只用于学习交流,不用于其他途径,后果自负~!~!

**转载请注明来自吃饭睡觉撸码的博客 http://www.cnblogs.com/Erma-king/,并包含相关链接。**

6楼刘吉祥
楼主有没有相关的python语法之类的书籍推荐。
Re: Erma_Jack
@刘吉祥,http://www.runoob.com/python/python-tutorial.html,这网站~入门够了~
5楼抠脚大汉
html源码能看到,ajax请求数据浏览器能抓到,几乎是明文,没啥难度,倒是网易的邮箱注册有点意思,你可以看看
Re: Erma_Jack
@抠脚大汉,好的~一定研究,你们的建议我都一一记录下来了,抽时间一定研究~
4楼刘吉祥
又有新东西了,看看,有没有一些关于数据分析之类的demo参考一下?
Re: Erma_Jack
@刘吉祥,还没有,这两天还在考虑选择mongodb还是redis,之后有时间会做玩一套~加上数据分析,还有可视化~
3楼jumahe
请问,在win下如何运行。。。。执行python main.py不行呀
Re: Erma_Jack
@jumahe,环境配置了么?Python2.7下执行~
2楼Gin.p
这种方法有时有效,但看不穿他返回参数意义的时候,这就不好用了,楼主有什么办法可以真正爬ajax?
Re: Erma_Jack
@Gin.p,没有~京东也不是*~规则会经常变得~
1楼heat nan
说说你的小名吧
Re: Erma_Jack
@heat nan,你猜~