[关闭]
@myles 2017-04-13T16:39:47.000000Z 字数 3641 阅读 2586

re 正则之图片抓取


python正则匹配

一、爬虫所用技术

目标:下载淘宝某页面的所有图片
目标URL:https://shouji.tmall.com/?spm=875.7931836

技术路线:requests + re正则

二、程序设计

1.1 设计思路

  1. 使用requests库,爬取网站html源码;
  2. 使用re正则提取图片url链接信息,并填充到一个空列表中;
  3. 创建图片存放目录;
  4. 读取存放列表链接,进行图片下载。

1.2 图片链接特征分析

  1. <a href="//detail.tmall.com/item.htm?acm=lb-zebra-164656-978614.1003.4.845135&amp;id=547561600523&amp;
  2. scm=1003.4.lb-zebra-164656-978614.ITEM_547561600523_845135" class="mod-g-photo">
  3. <img src="//g.alicdn.com/s.gif"
  4. data-lazyload-src="//img.alicdn.com/imgextra/i3/1677335387/TB22hPmkR8lpuFjy0FnXXcZyXXa_!!1677335387.jpg"
  5. alt="4月6日 努比亚 Z17mini"/>
  6. </a>
  1. <img src="//g.alicdn.com/s.gif"
  2. data-lazyload-src="//img.alicdn.com/imgextra/i3/1677335387/TB22hPmkR8lpuFjy0FnXXcZyXXa_!!1677335387.jpg"
  1. regex = re.compile(r'img.alicdn.com.*\.jpg')

三、实例代码

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # @Date : 2017-04-09 13:11:08
  4. # @Author : myles
  5. # @Version : Version1.0
  6. import requests
  7. import re
  8. import os,sys

3.1 HTML源码下载(通用代码框架)

  1. # 1.定义HTML源码下载(通用代码框架)
  2. def getHTMLText(_url):
  3. try:
  4. r = requests.get(_url,timeout=30)
  5. r.raise_for_status()
  6. r.encoding =r.apparent_encoding
  7. return r.text
  8. except:
  9. return "Download HTMLText Error..."

3.2 re正则获取图片链接

  1. # 2.使用re正则进行手机图片链接的获取,并存入空列表中
  2. def getLINKList(_html,_linklist):
  3. regex = re.compile(r'//img\.alicdn\.com.*\.jpg') #此处的正则需要根据实际情况来定义
  4. lklist = regex.findall(_html) #获取到的图片链接格式没http协议头://img.alicdn.com/tps/TB1VonlNXXXXXbEXFXXXXXXXXXX-160-100.jpg
  5. for lk in lklist:
  6. link = "http:" + lk #给每一个图片链接添加“http:”的协议头.
  7. _linklist.append(link)
  8. return _linklist

3.3 图片存放目录检查与创建(通用代码框架)

  1. # 3. 检查和创建图片存放目录root_dir_path (可以作为目录创建的“通用代码框架”来使用了.)
  2. def MakeRoor_dir_path(_root_dir):
  3. root = os.getcwd()
  4. root_dir_path = root + "/" + _root_dir + "/"
  5. if not os.path.exists(root_dir_path):
  6. os.mkdir(root_dir_path)
  7. print("图片存放目录{}创建成功,接下来将进行图片的下载...".format(root_dir_path))
  8. else:
  9. print("图片存放目录{}已经存在,接下来将继续进行图片的下载...".format(root_dir_path))
  10. return root_dir_path

3.4 通用代码框架:图片下载

  1. # 4.图片下载
  2. def DowanloadPic(_linklist,_root_dir_path):
  3. x = 1
  4. for link in _linklist:
  5. full_path = _root_dir_path + str(x) + ".jpg"
  6. if not os.path.exists(full_path):
  7. with open(full_path, 'wb') as file:
  8. r = requests.get(link)
  9. file.write(r.content)
  10. file.close()
  11. print("第{}张图片:{}下载完成,将继续下一张图片下载...\n".format(x,link.split('/')[-1]))
  12. x += 1

3.5 定义主函数**

  1. # 5.定义主函数
  2. def main():
  3. url = "https://shouji.tmall.com/?spm=875.7931836"
  4. lst = []
  5. root_dir = input("请输入图片存放目录,如tmp:") #输入图片存放目录名称.
  6. html = getHTMLText(url)
  7. linklist = getLINKList(html,lst) #获取图片链接列表 linklist
  8. #for link in linklist:
  9. # print("{}\n\t".format(link))
  10. root_dir_path = MakeRoor_dir_path(root_dir)
  11. DowanloadPic(linklist,root_dir_path)
  12. # 调用主函数
  13. main()

四、程序运行效果

4.1 脚本运行效果

请输入图片存放目录,如:>>>PIC
图片存放目录C:\Users\Administrator\Desktop\123/PIC/创建成功,接下来将进行图片的下载...
第1张图片:TB1RAVjQFXXXXXNXXXXSutbFXXX.jpg下载完成,将继续下一张图片下载...
第2张图片:TB19VgtQpXXXXceXpXXXXXXXXXX-1190-300.jpg下载完成,将继续下一张图片下载...
第3张图片:TB1xyn6QpXXXXabXFXXSutbFXXX.jpg下载完成,将继续下一张图片下载...
第4张图片:TB1Yc63QpXXXXccXVXXSutbFXXX.jpg下载完成,将继续下一张图片下载...
第5张图片:TB2Budxl4hmpuFjSZFyXXcLdFXa-2043230365.jpg下载完成,将继续下一张图片下载...
第6张图片:TB2E8cokrBnpuFjSZFGXXX51pXa-883737303.jpg下载完成,将继续下一张图片下载...
第7张图片:TB22hPmkR8lpuFjy0FnXXcZyXXa_!!1677335387.jpg下载完成,将继续下一张图片下载...
第8张图片:TB2tqhZj0BopuFjSZPcXXc9EpXa_!!901409638.jpg下载完成,将继续下一张图片下载...
第9张图片:TB2Qv88hHFkpuFjy1XcXXclapXa_!!2838892713.jpg下载完成,将继续下一张图片下载...
第10张图片:TB2esmVkShlpuFjSspkXXa1ApXa_!!901409638.jpg下载完成,将继续下一张图片下载...

脚本运行效果图脚本运行效果图


4.2 图片下载效果

Markdown

五、学习收获

5.1 图片存放网站

第三方图片存放网站:贴图库

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注