前言

本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧。
主要工具
分析步骤
1、打开京东首页,输入裤子将会看到页面跳转到了这里,这就是我们要分析的起点
2、我们可以看到这个页面并不是完全的,当我们往下拉的时候将会看到图片在不停的加载,这就是ajax,但是当我们下拉到底的时候就会看到整个页面加载了60条裤子的信息,我们打开chrome的调试工具,查找页面元素时可以看到每条裤子的信息都在<li class='gl-item'></li>这个标签中,如下图:
3、接着我们打开网页源码就会发现其实网页源码只有前30条的数据,后面30条的数据找不到,因此这里就会想到ajax,一种异步加载的方式,于是我们就要开始抓包了,我们打开chrome按F12,点击上面的NetWork,然后点击XHR,这个比较容易好找,下面开始抓包,如下图:
4、从上面可以找到请求的url,发现有很长的一大段,我们试着去掉一些看看可不可以打开,简化之后的url=https://search.jd.com/s_new.php?keyword=%E8%A3%A4%E5%AD%90&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&offset=3&wq=%E8%A3%A4%E5%AD%90&page={0}&s=26&scrolling=y&pos=30&show_items={1}
这里的showitems是裤子的id,page是翻页的,可以看出来我们只需要改动两处就可以打开不同的网页了,这里的page很好找,你会发现一个很好玩的事情,就是主网页的page是奇数,但是异步加载的网页中的page是偶数,因此这里只要填上偶数就可以了,但是填奇数也是可以访问的。这里的show_items就是id了,我们可以在页面的源码中找到,通过查找可以看到id在li标签的data-pid中,详情请看下图
上面我们知道怎样找参数了,现在就可以撸代码了
代码讲解
1、首先我们要获取网页的源码,这里我用的requests库,安装方法为pip install requests,代码如下:
def get_html(self): res = requests.get(self.url, headers=self.headers) html = res.text return html #返回的源代码
2、根据上面的分析可以知道,第二步就是得到异步加载的url中的参数show_items,就是li标签中的data-pid,代码如下:
def get_pids(self):
html = self.get_html()
soup = BeautifulSoup(html, 'lxml') #创建BeautifulSoup对象
lis = soup.find_all("li", class_='gl-item') #查找li标签
for li in lis:
data_pid = li.get("data-pid") #得到li标签下的data-pid
if (data_pid):
self.pids.add(data_pid) #这里的self.pids是一个集合,用于过滤重复的
3、下面就是获取前30张图片的url了,也就是主网页上的图片,其中一个问题是img标签的属性并不是一样的,也就是源码中的img中不都是src属性,一开始已经加载出来的图片就是src属性,但是没有加载出来的图片是data-lazy-img,因此在解析页面的时候要加上讨论。
代码如下:
def get_src_imgs_data(self):
html = self.get_html()
soup = BeautifulSoup(html, 'lxml')
divs = soup.find_all("div", class_='p-img') # 图片
# divs_prices = soup.find_all("div", class_='p-price') #价格
for div in divs:
img_1 = div.find("img").get('data-lazy-img') # 得到没有加载出来的url
img_2 = div.find("img").get("src") # 得到已经加载出来的url
if img_1:
print img_1
self.sql.save_img(img_1)
self.img_urls.add(img_1)
if img_2:
print img_2
self.sql.save_img(img_2)
self.img_urls.add(img_2)
前三十张图片找到了,现在开始找后三十张图片了,当然是要请求那个异步加载的url,前面已经把需要的参数给找到了,下面就好办了,直接贴代码:
def get_extend_imgs_data(self):
# self.search_urls=self.search_urls+','.join(self.pids)
self.search_urls = self.search_urls.format(str(self.search_page), ','.join(self.pids)) #拼凑url,将获得的单数拼成url,其中show_items中的id是用','隔开的,因此要对集合中的每一个id分割,page就是偶数,这里直接用主网页的page加一就可以了
print self.search_urls
html = requests.get(self.search_urls, headers=self.headers).text #请求
soup = BeautifulSoup(html, 'lxml')
div_search = soup.find_all("div", class_='p-img') #解析
for div in div_search:
img_3 = div.find("img").get('data-lazy-img') #这里可以看到分开查找img属性了
img_4 = div.find("img").get("src")
if img_3: #如果是data-lazy-img
print img_3
self.sql.save_img(img_3) #存储到数据库
self.img_urls.add(img_3) #用集合去重
if img_4: #如果是src属性
print img_4
self.sql.save_img(img_4)
self.img_urls.add(img_4)
4、通过上面就可以爬取了,但是还是要考虑速度的问题,这里我用了多线程,直接每一页面开启一个线程,速度还是可以的,感觉这个速度还是可以的,几分钟解决问题,总共爬取了100个网页,这里的存储方式是mysql数据库存储的,要用发哦MySQLdb这个库,详情自己百度。
当然也可以用mogodb,但是还没有学呢,想要的源码的朋友请看下面:
一、GitHub源码
二、本地下载
拓展总结
写到这里可以看到搜索首页的网址中keyword和wq都是你输入的词,如果你想要爬取更多的信息,可以将这两个词改成你想要搜索的词即可,直接将汉字写上,在请求的时候会自动帮你编码的,我也试过了,可以抓取源码的,如果你想要不断的抓取,可以将要搜索的词写上文件里,然后从文件中读取就可以了。以上只是一个普通的爬虫,并没有用到什么框架,接下来将会写scrapy框架爬取的,请继续关注哦!!!
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# python爬取京东
# python
# 爬虫爬取京东
# 爬取网页数据
# python+selenium小米商城红米K40手机自动抢购的示例代码
# python框架Django实战商城项目之工程搭建过程图文详解
# python简单商城购物车实例代码
# Python 实现购物商城
# 含有用户入口和商家入口的示例
# python爬虫框架scrapy实战之爬取京东商城进阶篇
# python 实现网上商城
# 转账
# 存取款等功能的信用卡系统
# python实现简单购物商城
# python抓取京东商城手机列表url实例代码
# python实现淘宝购物系统
# Python实现购物系统(示例讲解)
# Python实现信用卡系统(支持购物、转账、存取钱)
# 基于Python实现的购物商城管理系统
# 加载
# 可以看到
# 就可以
# 就会
# 将会
# 都是
# 这就是
# 当我们
# 首页
# 写上
# 你想要
# 如下图
# 的是
# 是一个
# 京东
# 找到了
# 我也
# 如果你
# 还没有
# 很好
相关文章:
建站之星在线客服如何快速接入解答?
活动邀请函制作网站有哪些,活动邀请函文案?
如何配置WinSCP新建站点的密钥验证步骤?
模具网站制作流程,如何找模具客户?
如何在万网主机上快速搭建网站?
如何在建站宝盒中设置产品搜索功能?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
公司网站制作价格怎么算,公司办个官网需要多少钱?
ui设计制作网站有哪些,手机UI设计网址吗?
如何用花生壳三步快速搭建专属网站?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
如何在Ubuntu系统下快速搭建WordPress个人网站?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
python的本地网站制作,如何创建本地站点?
Python lxml的etree和ElementTree有什么区别
建站主机与虚拟主机有何区别?如何选择最优方案?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
淘宝制作网站有哪些,淘宝网官网主页?
建站之星下载版如何获取与安装?
,怎么在广州志愿者网站注册?
安徽网站建设与外贸建站服务专业定制方案
桂林网站制作公司有哪些,桂林马拉松怎么报名?
红河网站制作公司,红河事业单位身份证如何上传?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
平台云上自助建站如何快速打造专业网站?
建设网站制作价格,怎样建立自己的公司网站?
北京专业网站制作设计师招聘,北京白云观官方网站?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
如何在云服务器上快速搭建个人网站?
如何挑选优质建站一级代理提升网站排名?
如何在IIS7上新建站点并设置安全权限?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
北京网站制作公司哪家好一点,北京租房网站有哪些?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
如何在Windows环境下新建FTP站点并设置权限?
如何做静态网页,sublimetext3.0制作静态网页?
建站之星在线版空间:自助建站+智能模板一键生成方案
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
存储型VPS适合搭建中小型网站吗?
如何用VPS主机快速搭建个人网站?
c++怎么用jemalloc c++替换默认内存分配器【性能】
如何用虚拟主机快速搭建网站?详细步骤解析
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
个人摄影网站制作流程,摄影爱好者都去什么网站?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
如何生成腾讯云建站专用兑换码?
广州美橙建站如何快速搭建多端合一网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。