Python 爬虫图片简单实现


Posted in Python onJune 01, 2017

Python 爬虫图片简单实现

经常在逛知乎,有时候希望把一些问题的图片集中保存起来。于是就有了这个程序。这是一个非常简单的图片爬虫程序,只能爬取已经刷出来的部分的图片。由于对这一部分内容不太熟悉,所以只是简单说几句然后记录代码,不做过多的讲解。感兴趣的可以直接拿去用。亲测对于知乎等网站是可用的。

上一篇分享了通过url打开图片的方法,目的就是先看看爬取到的图片时什么样,然后再筛选一下保存。

这里用到了requests库来获取页面信息,需要注意的是,获取页面信息的时候需要一个header,用以把程序伪装成浏览器去访问服务器,不然可能会被服务器拒绝。然后用BeautifulSoup来过滤多余信息得到图片地址。得到图片后,根据图片的大小过滤掉一些头像、表情包之类的小图片。最后打开或者保存图片的时候选择就比较多了,OpenCV,skimage,PIL等都可以。

程序如下:

# -*- coding=utf-8 -*-
import requests as req
from bs4 import BeautifulSoup
from PIL import Image
from io import BytesIO
import os
from skimage import io

url = "https://www.zhihu.com/question/37787176"
headers = {'User-Agent' : 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Mobile Safari/537.36'}
response = req.get(url,headers=headers)
content = str(response.content)
#print content

soup = BeautifulSoup(content,'lxml')
images = soup.find_all('img')
print u"共有%d张图片" % len(images)

if not os.path.exists("images"):
  os.mkdir("images")

for i in range(len(images)):
  img = images[i]
  print u"正在处理第%d张图片..." % (i+1)
  img_src = img.get('src')
  if img_src.startswith("http"):
    ## use PIL
    '''
    print img_src
    response = req.get(img_src,headers=headers)
    image = Image.open(BytesIO(response.content))
    w,h = image.size
    print w,h
    img_path = "images/" + str(i+1) + ".jpg"
    if w>=500 and h>500:
      #image.show()
      image.save(img_path)

    '''

    ## use OpenCV
    import numpy as np
    import urllib
    import cv2

    resp = urllib.urlopen(img_src)

    image = np.asarray(bytearray(resp.read()), dtype="uint8")
    image = cv2.imdecode(image, cv2.IMREAD_COLOR)
    w,h = image.shape[:2]
    print w,h
    img_path = "images/" + str(i+1) + ".jpg"
    if w>=400 and h>400:
      cv2.imshow("Image", image)
      cv2.waitKey(3000)
      ##cv2.imwrite(img_path,image)

    ## use skimage

    ## image = io.imread(img_src)
    ## w,h = image.shape[:2]
    ## print w,h
    #io.imshow(image)
    #io.show()

    ## img_path = "images/" + str(i+1) + ".jpg"
    ## if w>=500 and h>500:
      ## image.show()
      ## image.save(img_path)
      ## io.imsave(img_path,image)

print u"处理完成!"

这里给出了多种选择,供参考。

Python 相关文章推荐
python实现倒计时的示例
Feb 14 Python
Python 高级专用类方法的实例详解
Sep 11 Python
python中pylint使用方法(pylint代码检查)
Apr 06 Python
Python通过调用有道翻译api实现翻译功能示例
Jul 19 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
Oct 14 Python
python调用动态链接库的基本过程详解
Jun 19 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
Oct 17 Python
python json load json 数据后出现乱序的解决方案
Feb 27 Python
Python实现获取当前目录下文件名代码详解
Mar 10 Python
基于python实现破解滑动验证码过程解析
May 28 Python
Python实现简单的2048小游戏
Mar 01 Python
分享7个 Python 实战项目练习
Mar 03 Python
Python 通过URL打开图片实例详解
Jun 01 #Python
git使用.gitignore设置不生效或不起作用问题的解决方法
Jun 01 #Python
python 内置函数filter
Jun 01 #Python
python读取二进制mnist实例详解
May 31 #Python
Python算术运算符实例详解
May 31 #Python
Python简单的制作图片验证码实例
May 31 #Python
详解python的webrtc库实现语音端点检测
May 31 #Python
You might like
PHP时间戳使用实例代码
2008/06/07 PHP
基于MySQL分区性能的详细介绍
2013/05/02 PHP
解析php入库和出库
2013/06/25 PHP
YII框架行为behaviors用法示例
2019/04/26 PHP
jQuery 核心函数以及jQuery对象
2010/03/23 Javascript
js用typeof方法判断undefined类型
2014/07/15 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
javascript事件处理模型实例说明
2016/05/31 Javascript
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
2019/03/28 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
灵活使用console让js调试更简单的方法步骤
2019/04/23 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
2020/04/24 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
JavaScript中CreateTextFile函数
2020/08/30 Javascript
python使用PyGame播放Midi和Mp3文件的方法
2015/04/24 Python
简单介绍Python中的struct模块
2015/04/28 Python
python处理图片之PIL模块简单使用方法
2015/05/11 Python
Python利用splinter实现浏览器自动化操作方法
2018/05/11 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
django的ORM模型的实现原理
2019/03/04 Python
24式加速你的Python(小结)
2019/06/13 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
python 字符串的驻留机制及优缺点
2020/06/19 Python
如何利用Python 进行边缘检测
2020/10/14 Python
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
Web前端页面跳转并取到值
2017/04/24 HTML / CSS
小学生环保倡议书
2014/05/15 职场文书
搞笑车尾标语
2014/06/23 职场文书
旅游专业毕业生自荐书
2014/06/30 职场文书
农村结婚典礼主持词
2015/06/29 职场文书