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

前言

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

主要工具

scrapy

BeautifulSoup

requests

分析步骤

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

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

这个标签中,如下图:

2017424111402195.jpg?2017324111416

3、接着我们打开网页源码就会发现其实网页源码只有前30条的数据,后面30条的数据找不到,因此这里就会想到ajax,一种异步加载的方式,于是我们就要开始抓包了,我们打开chrome按F12,点击上面的NetWork,然后点击XHR,这个比较容易好找,下面开始抓包,如下图:

2017424111807130.jpg?2017324111816

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中,详情请看下图

2017424111910210.jpg?2017324111918

上面我们知道怎样找参数了,现在就可以撸代码了

代码讲解

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

拓展总结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468240.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓camera总体框架

今天是周五了,时间过得真快,通常这个时候,我都还沉醉了上班的状态中,说到上班,我是认真的,我非常喜欢上班,特别是今天,我会听到一声优美的声音,我的银行卡会多出一些钱&a…

matlab可以连接阻抗分析仪么,阻抗分析仪的工作原理与测试方法

阻抗分析仪和LCR表是非常通用的测量器件的电子仪器。根据阻抗范围和频率范围的不同,有一系列不同原理的仪器来满足测试要求,图1是不同阻抗范围和不同频率范围的阻抗测量方法。图1 阻抗测量方法图2是自动平衡电桥法的原理框图。通过精确测量加载到被测件D…

分享几个有意思的视频

最近微信加我的好友有点多,然后问问题的也不少,有的问题我不知道,有的问题我觉得百度一下应该很多答案,有的问题我觉得我可以知道,但是需要自己去寻找答案,也需要花费我一些时间,我有时候非常不…

php+redis+设置前缀,spring使用Redis自定义前缀后缀名(去掉SimpleKey []+自定义)

标签:spring中自动加上 SimpleKey [] 解决方案一、自定义后缀名1、定义类实现KeyGenerator接口MyKeyGeneratorpackage com.wbg.springRedis.service.impl;import org.springframework.cache.interceptor.KeyGenerator;import org.springframework.stereotype.Compon…

北京的林书豪,像一把小李飞刀

从《我要打篮球》节目开始,就一直在关注书豪的比赛,我喜欢书豪,书豪选择来CBA打球,也满足了很多球迷的愿望,近距离感受球星的那种状态,今天晚上,北京跟青岛的比赛,我是一分钟没有拉下…

I2C和SPI注定要打一架

最近微信群里好几天聊到I2C,既然说到了I2C,那就有必要说SPI,那就一起说了算了,大家有更好见解的,留言回复下,让更多的人知道你的观点。整理与网络,侵删I2C和SPI应该要打一架?现今&am…

第1章 ssh命令和SSH服务详解

基础服务类系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 本文对SSH连接验证机制进行了非常详细的分析,还详细介绍了ssh客户端工具的各种功能,相信能让各位对ssh有个全方位较透彻的了解,而不是仅仅只会用它来连接远…

漫画:什么是区块链?

两年前,小灰以前写过一期关于区块链的漫画,可能很多新来的小伙伴还没有看过。最近趁着区块链重新成为热门话题,小灰把这篇漫画稍作修改,再次推送给大家。什么是区块链?区块链,英文 Blockchain,本…

php外卖系统源码单店,网上订餐系统 v3.1 单店版

系统以简单实用为主,系统的每一个功能都是实用的,像以很多网站为了好看把页面填的满满的,用户进来不知从何处操作起,我们的系统,一切了为了用户,为了网站经营者。我们所做的不仅仅是一个店铺展示系统&#…

python爬酷狗音乐_良心推荐!一个Python高手必读的库,真香!

菜鸟进阶高手,需要内外的修炼,外练招式,内修心法。招式有很多比如基本的函数,类,文件,模块,到并发,数据库的使用,再到一些框架的使用无论是爬虫的西瓜皮框架,…

web容器(02):tomcat配置监控

1、tomcat的目录结构 tomcat一般给Java应用的&#xff0c;apache一般给php应用的 bin文件夹(启动文件)&#xff1a; 配置监听之类的内容是在catalina.sh中加 conf文件夹(配置文件)&#xff1a; 2、server.xml配置文件说明 <Server port"8005" shutdown"SHUTD…

一般一个前端项目完成需要多久_制作分销小程序最快要多久

小猪V5分销小程序小编了解到&#xff0c;微商城及微分销搭建成为当下热门话题&#xff0c;下面从多个方面来谈谈快速制作电商小程序最快要多久。微信为小程序开放了超过60多个入口&#xff0c;比如有微信群聊入口、微信聊天主界面下拉、App分享信息卡片、发现栏小程序主入口、发…

那些有趣的电子漫画合集

素材来源&#xff1a;芯片之家同事调电路连续通宵两个晚上&#xff0c;结果。。。坐着我的芯片靠椅&#xff0c;剪个帅帅的光头。更多电子漫画合集&#xff1a;转自&#xff1a;长按识别图中二维码关注—————END—————扫码或长按关注回复「加群」进入技术群聊

vim nerdtree 标签_7款vim插件

作者&#xff1a;QvQ链接&#xff1a;https://zhuanlan.zhihu.com/p/145793963来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。集成开发环境&#xff08;IDE&#xff0c;Integrated Development Environment &#xff09…

单片机怎么学?

—————END—————扫码或长按关注回复「 加群 」进入技术群聊

tableau linux无网络安装_四十二、Linux网络管理,软件安装,进程管理总结

「Author&#xff1a; Runsen」1、⽹络管理1.1 网络状态查看在Linux中经常使用ifconfig&#xff0c;route和netstat查看网络状态&#xff0c;它们就是. net-tools工具&#xff0c;下面我来使用下。我就说下ifconfig和route在我们的linux中有很多网卡接口&#xff0c;比如eth0第…

C语言,环形队列

什么是环形队列&#xff1f;环形缓冲区是一个非常典型的数据结构&#xff0c;这种数据结构符合生产者&#xff0c;消费者模型&#xff0c;可以理解它是一个水坑&#xff0c;生产者不断的往里面灌水&#xff0c;消费者就不断的从里面取出水。那就可能会有人问&#xff0c;既然需…

音频几个重要的参数

音频的采样率是什么&#xff1f;如果把音频当成一条曲线&#xff0c;那么采样率就是一秒钟从这个曲线里面提取样本的次数。8,000 Hz - 电话所用采样率, 对于人的说话已经足够11,025 Hz - AM调幅广播所用采样率22,050 Hz和24,000 Hz - FM调频广播所用采样率32,000 Hz - miniDV 数…

ps绿化工具_绿化消防车价位

绿化消防车价位绿化消防车价位 4吨东风消防洒水车&#xff0c;又称为多功能消防车&#xff0c;它是在东风原装二类底盘基础上加消防泵、消防炮、洒水炮及洒水车的前冲后洒、侧喷及水罐体组成&#xff0c;既能参加救火灭火功能&#xff0c;水炮的有效射程≥45米&#xff0c;每秒…

今天星期六

突然之间就到周六了&#xff0c;我记得上周的时候&#xff0c;我一个朋友说&#xff0c;这周我们要开个课程&#xff0c;课程的名字就叫做&#xff0c;「如何让你拥有快乐的今天」&#xff0c;然而&#xff0c;上周已经过去&#xff0c;嗖的一声&#xff0c;已经到了这周了&…