放养的小爬虫--京东定向爬虫(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叻?好吧,这里只有细心的观察了,就像一个小偷一样的宅在电脑前,偷偷地偷偷滴观察。。。。。。好吧,下面直接贴上详图吧

是的就是这个链接,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,请改为自己的吧
- 最后项目已经上传到github,github源代码地址https://github.com/Erma-Wang/Spider(注意,本仓库还有其他的小爬虫,本文章讲解的是JDSpider···),别忘了给个star哦@、@
- 还要了解更多的小爬虫的朋友们可以关注本博,并在本博的spider中找到其他的小爬虫,笔者会定时更新小爬虫的~
重要的事情再说三遍:
本文和本爬虫只用于学习交流,不用于其他途径,后果自负!!
本文和本爬虫只用于学习交流,不用于其他途径,后果自负!!
本文和本爬虫只用于学习交流,不用于其他途径,后果自负!!
转载请注明来自吃饭睡觉撸码的博客 http://www.cnblogs.com/Erma-king/,并包含相关链接。
放养的小爬虫--京东定向爬虫(AJAX获取价格数据)的更多相关文章
- 网络爬虫之定向爬虫:爬取当当网2015年图书销售排行榜信息(Crawler)
做了个爬虫,爬取当当网--2015年图书销售排行榜 TOP500 爬取的基本思想是:通过浏览网页,列出你所想要获取的信息,然后通过浏览网页的源码和检查(这里用的是chrome)来获相关信息的节点,最后 ...
- 放养的小爬虫--豆瓣电影入门级爬虫(mongodb使用教程~)
放养的小爬虫--豆瓣电影入门级爬虫(mongodb使用教程~) 笔者声明:只用于学习交流,不用于其他途径.源代码已上传github.githu地址:https://github.com/Erma-Wa ...
- 定向爬虫 - Python模拟新浪微博登录
当我们试图从新浪微博抓取数据时,我们会发现网页上提示未登录,无法查看其他用户的信息. 模拟登录是定向爬虫制作中一个必须克服的问题,只有这样才能爬取到更多的内容. 实现微博登录的方法有很多,一般我们在模 ...
- 【原】小玩node+express爬虫-2
上周写了一个node+experss的爬虫小入门.今天继续来学习一下,写一个爬虫2.0版本. 这次我们不再爬博客园了,咋玩点新的,爬爬电影天堂.因为每个周末都会在电影天堂下载一部电影来看看. talk ...
- 【原】小玩node+express爬虫-1
最近开始重新学习node.js,之前学的都忘了.所以准备重新学一下,那么,先从一个简单的爬虫开始吧. 什么是爬虫 百度百科的解释: 爬虫即网络爬虫,是一种自动获取网页内容的程序.是搜索引擎的重要组成部 ...
- python (2)xpath与定向爬虫
内容来自:极客学院,教学视频: 写在前面: 提取Item 选择器介绍 我们有很多方法从网站中提取数据.Scrapy 使用一种叫做 XPath selectors的机制,它基于 XPath表达式. 这是 ...
- Python定向爬虫实战
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7019963.html 一:requests模块介绍 requests是第三方http库,可以十分方便地实现py ...
- [Python]小百合十大爬虫
国庆几天在家看了几篇关于使用Python来编写网络爬虫的博客,想来自己断断续续学习Python也有几个月了,但一个像样的程序都没有写过,编程能力并没有得到提高,愧对自己花费的时间.很多时候虽然知道什么 ...
- Python之爬虫-京东商品
Python之爬虫-京东商品 #!/usr/bin/env python # coding: utf-8 from selenium import webdriver from selenium.we ...
随机推荐
- 数据库之SQL编程
定义局部变量 declare @num int 途径一: 途径二: set 和select赋值方式的区别 唯一区别,如果从数据库表中获取数据,只能用 select ) select @name =st ...
- Opencv算法学习二
1.直方图:图片中像素值分布情况的坐标图. 直方图均衡化:按一定规律拉伸像素值,提高像素值少的点,增加原图的对比度,使人感觉更清晰的函数. equalizeHist( src, dst ); 2.ha ...
- Delphi XE5 支持的Android 版本
Delphi XE5 已经支持Android应用开发. 那XE5支持Android的哪些版本呢?Delphi编译的APP能部署到Gingerbread (2.3.3-2.3.7), Ice Crea ...
- 转:隐马尔可夫模型(HMM)攻略
隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中,随后在语言识别,自然语言处理以及生物信息等领域体现了很大的价 ...
- 剑指Offer面试题:35.将字符串转换为数字
一.题目:将字符串转换为数字 题目:写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不能使用atoi或者其他类似的库函数. 二.代码实现 (1)考虑输入的字符串是否是NULL.空字符 ...
- 使用VS+VisualGDB编译Linux版本RCF
RPC通信框架--RCF介绍中说了,RCF本身是支持跨平台的,其代码放到Linux平台,是可以通过gcc.make等工具,编译通过的. 官方提供的源码中,只有cmake编译脚本,并没有提供Makefi ...
- 浅谈SQL Server数据库分页
数据库分页是老生常谈的问题了.如果使用ORM框架,再使用LINQ的话,一个Skip和Take就可以搞定.但是有时由于限制,需要使用存储过程来实现.在SQLServer中使用存储过程实现分页的已经有很多 ...
- C#+OpenGL+FreeType显示3D文字(2) - 用GLSL+VBO绘制文字
C#+OpenGL+FreeType显示3D文字(2) - 用GLSL+VBO绘制文字 +BIT祝威+悄悄在此留下版了个权的信息说: 上一篇得到了字形贴图及其位置字典(可导出为XML).本篇就利用此贴 ...
- Mycat配置及使用详解.
首先我们来看下什么是Mycat:MyCat:开源分布式数据库中间件, 这里定义的很简单, 就是分布式数据库的中间件. 其实Mycat 是可以时mysql进行集群的中间件, 我们可以对mysql来分库分 ...
- maven的聚合与继承
新建一个空的maven项目user-parent Pom.xml内容 <project xmlns="http://maven.apache.org/POM/4.0.0" x ...