超详细图片爬虫实战

  • 实例讲解(京东商城手机图片爬取)
    • 1.创建一个文件夹来存放你爬取的图片
    • 2.第一部分代码分析
    • 3.第二部分代码分析
  • 完整的代码如下所示:
  • 升级版代码:

爬取过程中首先你需要观察在手机页面变化的过程来使用正则表达式匹配源码中图片的链接然后在保存到本地
其次就是信息过滤,出除了你需要的手机图片以外的其他信息过滤掉:可通过查看网页代码找到图片的起始以及结束的代码

爬取过程:
1)建立一个爬取图片的自定义函数,该函数负责爬取一个页面下我们想要爬取的图片,爬取过程为:首先通过urli request uloen(ur),reado读取对应网页的全部源代码,然后根据上面的第一个正则表达式进行第一次信息过滤, 过滤完成之后, 在第一次过滤结果的基础上,根据上面的第二个正则表达式进行第二次信息过滤,提取出该网页上所有目标图片的链接,并将这些链接地址存储的- 个列表中,随后遍历该列表,分别将对应链接通过urlib.request.urlretrieve ( imageurl, filename imagename)存储到本地,为了避免程序中途异常崩溃,我们可以建立异常处理,若不能爬取某个图片,则会通过x+=1自动跳到下一个图片。

2)通过for循环将该分类下的所有网页都爬取一遍,链接可以构造为utI=t:/ist.jd.com/list.html?cat-9987.653,655&page "+str(i),在for循环里面, 每一次循环,对应的i会自动加1,每次循环的时候通过调用1 )中的函数实现该页图片的爬取。

实例讲解(京东商城手机图片爬取)

1.创建一个文件夹来存放你爬取的图片

目标网页:https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&suggest=1.def.0.V07–12s0%2C38s0%2C97s0&wq=shouji&page=“1”&s=90&click=0

首先根据网址特征我们会发现"page="这个参数能够改变网页的页数
那我们接下来试着打印出京东手机前二十页的手机网址信息
(点开每个网址你会发现page对应的数字也就是手机网页对应的页数)

for i in range(1,20):url = "https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&suggest=1.def.0.V07--12s0%2C38s0%2C97s0&wq=shouji&page="+str(i)+"&s=90&click=0"print(url)

2.第一部分代码分析

#导入需要的库
import re
import urllib.request
#将网址赋给url
url = "https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&suggest=1.def.0.V07--12s0%2C38s0%2C97s0&wq=shouji&page=1&s=90&click=0"
req=urllib.request.Request(url)
#修改报头将自己伪装为一个浏览器去访问
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36')
#得到此网页的代码
data=urllib.request.urlopen(req).read()
data=str(data)
#来打印一下data看看我们获取的代码
print(data)

同时我们将此网页打开 按F12
我们将抓取的网页代码和真实网页代码进行对比发现:
除了一些编码的问题其余内容基本一致
说明第一步我们成功了!!!

3.第二部分代码分析

根据网页里所需要抓取的代码特点来定义正则表达式
找到对应部分代码(鼠标指向代码块,网页会标记对应部分网页内容)
匹配模式1:

pat1 = '<div id="J_goodsList".+?<span class="clr"></span>'

匹配模式2:

pat2 = '<img width="220" height="220" data-img="1" src="//(.+?\.jpg)"'

代码如下:

import re
import urllib.request
url = "https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&suggest=1.def.0.V07--12s0%2C38s0%2C97s0&wq=shouji&page=1&s=90&click=0"
req=urllib.request.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36')
data=urllib.request.urlopen(req).read()
data=str(data)pat1 = '<div id="J_goodsList".+?<span class="clr"></span>'
#全局匹配
result1 = re.compile(pat1).findall(data)
result1 = result1[0]pat2 = '<img width="220" height="220" data-img="1" src="//(.+?\.jpg)"'
#全局匹配
imagelist = re.compile(pat2).findall(result1)
#我们同样来试着打印一下所抓取的内容
print(imagelist)

你会发现所抓取的内容正是我们所需要的图片连接列表
接下来就是需要我们去得到一张张的图片

完整的代码如下所示:

import re
import urllib.request
def craw(url,page):req=urllib.request.Request(url)req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36')html1 = urllib.request.urlopen(req).read()html1 = str(html1)pat1 = '<div id="J_goodsList".+?<span class="clr"></span>'result1 = re.compile(pat1).findall(html1)result1 = result1[0]pat2 = '<img width="220" height="220" data-img="1" src="//(.+?\.jpg)"'imagelist = re.compile(pat2).findall(result1)x=1for imageurl in imagelist:#保存到你所建文件夹路径下imagename = "C:/Users/Administrator/Desktop/爬虫学习/图片/"+str(page)+"-"+str(x)+".jpg"imageurl="http://"+imageurltry:urllib.request.urlretrieve(imageurl,filename=imagename)except urllib.error.URLError as e:if hasattr(e,"cofe"):x+=1if hasattr(e,"reason"):x+=1x+=1
for i in range(1,20):url = "https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&suggest=1.def.0.V07--12s0%2C38s0%2C97s0&wq=shouji&page="+str(i)+"&s=90&click=0"craw(url,i)

结果:

结果分析:出现结果我们会发现当我们爬取到第三页的时候就停止了。
原因分析:通过报错我们会发现是因为第三页出现了png图片,但是正则表达式设置为jpg匹配的也应该是对应的jpg图片。
有知道导致出现这种中断的原因的朋友可以评论一下谢谢!!!

更改思路:将爬取jpg图片的正则表达式更改为爬取jpg或者png图片

   pat2 = '<img width="220" height="220" data-img="1" src="//(.+?[\.jpg|\.png])"'

升级版代码:

import re
import urllib.request
def craw(url,page):req=urllib.request.Request(url)req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36')html1 = urllib.request.urlopen(req).read()html1 = str(html1)pat1 = '<div id="J_goodsList".+?<span class="clr"></span>'result1 = re.compile(pat1).findall(html1)result1 = result1[0]pat2 = '<img width="220" height="220" data-img="1" src="//(.+?[\.jpg|\.png])"'imagelist = re.compile(pat2).findall(result1)x=1for imageurl in imagelist:#保存到你所建文件夹路径下imagename = "C:/Users/Administrator/Desktop/爬虫学习/图片/"+str(page)+"-"+str(x)+".jpg"imageurl="http://"+imageurltry:urllib.request.urlretrieve(imageurl,filename=imagename)except urllib.error.URLError as e:if hasattr(e,"cofe"):x+=1if hasattr(e,"reason"):x+=1x+=1
for i in range(1,20):url = "https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&suggest=1.def.0.V07--12s0%2C38s0%2C97s0&wq=shouji&page="+str(i)+"&s=90&click=0"craw(url,i)

注意:爬取二十页图片下载量过大,代码运行时间长,可更改为爬取几页图片
结果图:

最后我们又可以发现新的问题:就是我们将所有的爬取的图片格式(jpg、png)都通过代码更改为了jpg

分享就到此结束啦 !!!

超详细解析python爬虫爬取京东图片相关推荐

  1. python爬虫爬取京东图片(python小白笔记七)

    有时候需要统计,图片参考等,用python爬虫.爬下来的图片再存储到本地,同时把文件的名称取出一下.同时,python真是个有趣的东西,欢迎一起交流学习. 代码如下: 我的只是提取第一页,同时把图片保 ...

  2. python爬虫,爬取下载图片

    python爬虫,爬取下载图片 分别引入以下三个包 from urllib.request import urlopen from bs4 import BeautifulSoup import re ...

  3. python爬虫爬取京东、淘宝、苏宁上华为P20购买评论

    爬虫爬取京东.淘宝.苏宁上华为P20购买评论 1.使用软件 Anaconda3 2.代码截图 三个网站代码大同小异,因此只展示一个 3.结果(部分) 京东 淘宝 苏宁 4.分析 这三个网站上的评论数据 ...

  4. Python爬虫爬取相关图片

    简要的实现实现Python爬虫爬取百度贴吧页面上的图片,下面的网页就是本篇博客所要爬的网页,当然看到的只是其中的一部分图片,是所要爬取的页面, 而下图则是最终的爬取的图片: 接下来就简要的讲讲爬取的整 ...

  5. python爬虫爬取网页图片_Python爬虫:爬取网页图片

    先分析查找要爬取图片的路径 在浏览器F12 审查元素 整体实现代码 # -- coding:UTF-8 -- import requests from bs4 import BeautifulSoup ...

  6. 利用python爬虫爬取京东商城商品图片

    笔者曾经用python第三方库requests来爬取京东商城的商品页内容,经过解析之后发现只爬到了商品页一半的图片.(这篇文章我们以爬取智能手机图片为例) 当鼠标没有向下滑时,此时查看源代码的话,就会 ...

  7. 上手快!!福利局!新手如何使用python爬虫爬取网页图片(使用正则进行数据解析)当然这个新手是我自己

    作为一个python新入门小白,突然就想发个博客,一方面为了记录学习历程,一方面能分享给新入门的同学经验,更多的是想和大家一起学习和交流.以下是我以小白的角度分享的爬虫的相关知识和一个简单的爬取网页图 ...

  8. python爬虫爬取京东商品评价_python爬取京东商品信息及评论

    ''' 爬取京东商品信息: 功能: 通过chromeDrive进行模拟访问需要爬取的京东商品详情页(https://item.jd.com/100003196609.html)并且程序支持多个页面爬取 ...

  9. 利用python爬虫爬取斗鱼图片(简单详细)

    关于 在一个安静的夜晚,我缓慢的打开了电脑,望着已经睡着的父母,我轻轻的把门关上,看着斗鱼颜值主播的魅力,我不尽感叹,要是每天都可以不需要那么麻烦的去看那该有多好! 于是我想起了最近刚学的爬虫,嘴角露 ...

最新文章

  1. 牛逼哄哄的 Lambda 表达式,简洁优雅就是生产力!
  2. R语言使用plot函数和lines函数可视化线图(line plot)时、图之间的主要区别是由选项type产生的、type参数常用参数说明、不同type生成的可视化图像对比
  3. Python 面向对象 --- 文件
  4. 聊一聊 java8 中的 Optional
  5. 页面加载被延迟 Firefox将禁用对DV和OV证书的OCSP检查
  6. 两大微服务框架dubbo和spring cloud对比
  7. 数据模型同学看过来|代码案例实操来袭
  8. 小网站服务器空间,小型网站空间服务器
  9. win7 右键无法新建txt
  10. python收取126或163邮件
  11. 关于介绍最好用的windows10系统的文章
  12. word删除空格、修复“断行”
  13. 为什么单片机管脚设计成低电平才有效
  14. 您需要最新版本的Outlook才能使用此数据库-MacOS的Outlook
  15. LL(1)语法分析器
  16. IE8下实现视频播放
  17. 正则表达式(匹配第一个花括号)
  18. 计算两个日期的相隔天数
  19. NTFS格式和FAT格式的区别
  20. 优秀程序员的18大法则-兄弟连IT教育

热门文章

  1. Python学习笔记:Python做热力地图
  2. 在计算机领域,半精度、单精度、双精度的定义,以及多精度计算和混合精度计算的区别。
  3. 约瑟夫环c语言循环指针,约瑟夫环(c语言)(双循环、单循环)
  4. Magic Data入选亿欧智库2022中国语音交互车端应用产业图谱
  5. HMM学习笔记_1(从一个实例中学习DTW算法)
  6. opencv中直方图和颜色跟踪相关:calcHist, calcBackProject, Meanshift和Camshift
  7. 自定义绘制地图(Echarts)
  8. 穷人与富人的经典区别,穷人们要收藏啊!
  9. 一起学ORBSLAM2(11)ORBSLAM的localmapping
  10. 缓存穿透、缓存雪崩、缓存击穿?