前言

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

主要工具

scrapy

BeautifulSoup

requests

分析步骤

1、打开京东首页,输入裤子将会看到页面跳转到了这里,这就是我们要分析的起点

2、我们可以看到这个页面并不是完全的,当我们往下拉的时候将会看到图片在不停的加载,这就是ajax,但是当我们下拉到底的时候就会看到整个页面加载了60条裤子的信息,我们打开chrome的调试工具,查找页面元素时可以看到每条裤子的信息都在

这个标签中,如下图:

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,代码如下:

1

2

3

4

def get_html(self):

res= requests.get(self.url, headers=self.headers)

html= res.text

return html#返回的源代码

2、根据上面的分析可以知道,第二步就是得到异步加载的url中的参数show_items,就是li标签中的data-pid,代码如下:

1

2

3

4

5

6

7

8

def get_pids(self):

html= self.get_html()

soup= BeautifulSoup(html,'lxml')#创建BeautifulSoup对象

lis= soup.find_all("li",class_='gl-item')#查找li标签

for liin 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,因此在解析页面的时候要加上讨论。

代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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 divin 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,前面已经把需要的参数给找到了,下面就好办了,直接贴代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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 divin 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,但是还没有学呢,想要的源码的朋友请看下面:

拓展总结

写到这里可以看到搜索首页的网址中keyword和wq都是你输入的词,如果你想要爬取更多的信息,可以将这两个词改成你想要搜索的词即可,直接将汉字写上,在请求的时候会自动帮你编码的,我也试过了,可以抓取源码的,如果你想要不断的抓取,可以将要搜索的词写上文件里,然后从文件中读取就可以了。以上只是一个普通的爬虫,并没有用到什么框架,接下来将会写scrapy框架爬取的,请继续关注服务器之家哦!!!

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。

原文链接:http://chenjiabing666.github.io6

python爬虫完整实例-python爬虫实战之爬取京东商城实例教程相关推荐

  1. 爬虫python的爬取步骤-python爬虫实战之爬取京东商城实例教程

    前言 本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧. 主要工具 scrapy BeautifulSoup requests 分析步骤 1. ...

  2. python爬虫爬图片教程_python爬虫实战之爬取京东商城实例教程

    前言 本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧. 主要工具 scrapy BeautifulSoup requests 分析步骤 1. ...

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

    前言 本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧. 主要工具 scrapy BeautifulSoup requests 分析步骤 1. ...

  4. 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储

    1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HBase等. 基于面向接口的编码思想来开发,因此这个系统具有一定的扩展性,有 ...

  5. 爬虫利器Pyppeteer的介绍和使用 爬取京东商城书籍信息

    提起 selenium 想必大家都不陌生,作为一款知名的 Web 自动化测试框架,selenium 支持多款主流浏览器,提供了功能丰富的API 接口,经常被我们用作爬虫工具来使用.但是 seleniu ...

  6. 爬虫利器Pyppeteer的介绍和使用 爬取京东商城书籍信息!

    提起 selenium 想必大家都不陌生,作为一款知名的 Web 自动化测试框架,selenium 支持多款主流浏览器,提供了功能丰富的API 接口,经常被我们用作爬虫工具来使用.但是 seleniu ...

  7. python 爬网站 实例_python爬虫实战:之爬取京东商城实例教程!(含源代码)

    前言: 本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧. 主要工具 scrapy BeautifulSoup requests 分析步骤 1 ...

  8. python爬京东联盟_python爬虫框架scrapy实战之爬取京东商城进阶篇

    前言 之前的一篇文章已经讲过怎样获取链接,怎样获得参数了,详情请看python爬取京东商城普通篇,本文将详细介绍利用python爬虫框架scrapy如何爬取京东商城,下面话不多说了,来看看详细的介绍吧 ...

  9. 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储...

    http://blog.51cto.com/xpleaf/2093952 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HB ...

最新文章

  1. 怎么给html页面添加网格线,html – 如何使用css制作网格(如图纸网格)?
  2. Redis生产环境架构选型方案对比
  3. 佳铁怎样传输程序_佳铁传输4.0工具下载|佳铁传输4.0软件 4.0 官方最新版
  4. win7系统待机模式下如何分配下载方法
  5. Ping命令及其协议
  6. html 在tomcat中访问不到_安全服务之安全基线及加固(四)Tomcat篇
  7. Oracle学习计划
  8. CLR Dynamic Languages
  9. 顺义教委携手华平共建视频图像综合管理平台
  10. c# 后台 添加datable 数据
  11. 梦断代码阅读笔记之二
  12. 修改weblogic服务的编码格式
  13. docker 不包含依赖 打包_docker源码打包RPM
  14. 单麦克纳姆轮的速度分解
  15. 监控sqlserver 数据变化并记录_携程机票数据仓库11年技术栈的演进
  16. 远程操作工具 Teamviewer
  17. tp交换机管理页面_tplink交换机怎样设置
  18. 网络营销之QQ推广技巧
  19. 魔兽RPG仿魔兽世界:基尔加丹的末日V1.0
  20. win10停止更新_win10电脑更新不动的解决方案

热门文章

  1. vant图标怎么显示不出来_U盘插进电脑但不显示怎么解决
  2. 南方电网两栖机器人_探访国内最大5G智能电网应用区:5G机器人已替代人工巡检...
  3. python测试脚本项目全程教程_《手把手教你》系列练习篇之5-python+ selenium自动化测试(详细教程)...
  4. docker 删除容器_Docker (二) Windows10专业版安装教程
  5. 更新版vimrc(java自动补全)
  6. composer 修改为 国内镜像
  7. Java获取运行环境信息
  8. 第一个只出现一次的字符位置
  9. 用BenchmarkDotNet给C#程序做性能测试
  10. Scalaz(23)- 泛函数据结构: Zipper-游标定位