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程序语言快速上手教程
Jul 18 Python
pygame学习笔记(1):矩形、圆型画图实例
Apr 15 Python
Python检测QQ在线状态的方法
May 09 Python
Python selenium文件上传方法汇总
Nov 19 Python
梅尔倒谱系数(MFCC)实现
Jun 19 Python
Python爬虫动态ip代理防止被封的方法
Jul 07 Python
让Python脚本暂停执行的几种方法(小结)
Jul 11 Python
如何用Python来理一理红楼梦里的那些关系
Aug 14 Python
Python 日期与时间转换的方法
Aug 01 Python
详解pandas映射与数据转换
Jan 22 Python
Python制作运行进度条的实现效果(代码运行不无聊)
Feb 24 Python
django如何自定义manage.py管理命令
Apr 27 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对大文件进行读取操作的实现代码
2013/01/23 PHP
解析PHP自带的进位制之间的转换函数
2013/06/08 PHP
php在线解压ZIP文件的方法
2014/12/30 PHP
PHP设计模式之简单投诉页面实例
2016/02/24 PHP
PHP内存缓存功能memcached示例
2016/10/19 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
再论Javascript下字符串连接的性能
2011/03/05 Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
2013/07/17 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
2014/09/01 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
jquery对象和DOM对象的相互转换详解
2016/10/18 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
iview给radio按钮组件加点击事件的实例
2017/09/30 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
2019/06/03 Javascript
微信小程序实现页面浮动导航
2020/01/08 Javascript
pygame学习笔记(1):矩形、圆型画图实例
2015/04/15 Python
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
python实现人人自动回复、抢沙发功能
2018/06/08 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
python实现简单飞行棋
2020/02/06 Python
Python如何实现爬取B站视频
2020/05/20 Python
从python读取sql的实例方法
2020/07/21 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
共青团员自我评价
2015/03/10 职场文书
个人更名证明
2015/06/23 职场文书
2015暑假实习报告范文
2015/07/13 职场文书
Python实现生活常识解答机器人
2021/06/28 Python
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis
台积电称即便经济低迷也没有降价的计划
2022/04/21 数码科技
MySQL数据库之存储过程 procedure
2022/06/16 MySQL