全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

python爬虫实战之爬取京东商城实例教程

前言

本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧。

主要工具

  • scrapy
  • BeautifulSoup
  • requests

分析步骤

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实现的购物商城管理系统  # 加载  # 可以看到  # 就可以  # 就会  # 将会  # 都是  # 这就是  # 当我们  # 首页  # 写上  # 你想要  # 如下图  # 的是  # 是一个  # 京东  # 找到了  # 我也  # 如果你  # 还没有  # 很好 


相关文章: 如何用PHP快速搭建CMS系统?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  制作销售网站教学视频,销售网站有哪些?  Swift中switch语句区间和元组模式匹配  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  山东网站制作公司有哪些,山东大源集团官网?  建站之星云端配置指南:模板选择与SEO优化一键生成  如何选择可靠的免备案建站服务器?  如何快速启动建站代理加盟业务?  建站之星如何开启自定义404页面避免用户流失?  内网网站制作软件,内网的网站如何发布到外网?  如何通过虚拟主机空间快速建站?  制作公司内部网站有哪些,内网如何建网站?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  宝塔建站助手安装配置与建站模板使用全流程解析  如何零成本快速生成个人自助网站?  已有域名和空间如何搭建网站?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  寿县云建站:智能SEO优化与多行业模板快速上线指南  临沂网站制作企业,临沂第三中学官方网站?  如何用AWS免费套餐快速搭建高效网站?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  盐城做公司网站,江苏电子版退休证办理流程?  小型网站制作HTML,*游戏网站怎么搭建?  如何选择最佳自助建站系统?快速指南解析优劣  如何构建满足综合性能需求的优质建站方案?  h5在线制作网站电脑版下载,h5网页制作软件?  建站之星×万网:智能建站系统+自助建站平台一键生成  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  建站主机如何选?性能与价格怎样平衡?  建站之星微信建站一键生成小程序+多端营销系统  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  宝塔新建站点报错如何解决?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  如何选择服务器才能高效搭建专属网站?  建站主机数据库如何配置才能提升网站性能?  如何基于PHP生成高效IDC网络公司建站源码?  如何在Windows环境下新建FTP站点并设置权限?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  网站代码制作软件有哪些,如何生成自己网站的代码?  大连网站设计制作招聘信息,大连投诉网站有哪些?  小程序网站制作需要准备什么资料,如何制作小程序?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  沈阳制作网站公司排名,沈阳装饰协会官方网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。