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之网站的结构
Oct 24 Python
Python中DJANGO简单测试实例
May 11 Python
Python中文字符串截取问题
Jun 15 Python
Django中处理出错页面的方法
Jul 15 Python
Django的session中对于用户验证的支持
Jul 23 Python
TensorFlow利用saver保存和提取参数的实例
Jul 26 Python
Django Celery异步任务队列的实现
Jul 24 Python
python 直接赋值和copy的区别详解
Aug 07 Python
python Django框架实现web端分页呈现数据
Oct 31 Python
pandas和spark dataframe互相转换实例详解
Feb 18 Python
什么是Python中的顺序表
Jun 02 Python
python3.8动态人脸识别的实现示例
Sep 21 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 minixml详解
2008/07/19 PHP
php学习之运算符相关概念
2011/06/09 PHP
php设计模式之委托模式
2016/02/13 PHP
SAE实时日志接口SDK用法示例
2016/10/09 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
php语言注释,单行注释和多行注释
2018/01/21 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
javascript 函数式编程
2007/08/16 Javascript
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
js实现鼠标移到链接文字弹出一个提示层的方法
2015/05/11 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
2017/07/20 Javascript
JS实现手写parseInt的方法示例
2017/09/24 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
2018/09/19 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
Map与WeakMap类型在JavaScript中的使用详解
2020/11/18 Javascript
python实现自动化上线脚本的示例
2019/07/01 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
html5中去掉input type date默认样式的方法
2018/09/06 HTML / CSS
北卡罗来纳州豪华家具和家居装饰店:Carolina Rustica
2018/10/30 全球购物
产品发布会策划方案
2014/05/12 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
教师优秀党员事迹材料
2014/08/14 职场文书
泰山导游词
2015/02/02 职场文书
大班上学期个人总结
2015/02/13 职场文书
工作会议通知
2015/04/15 职场文书
幼儿园开学报名通知
2015/07/16 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书
2016年社区服务活动总结
2016/04/06 职场文书
Ajax实现局部刷新的方法实例
2021/03/31 Javascript
Pytorch 如何加速Dataloader提升数据读取速度
2021/05/28 Python
带你学习MySQL执行计划
2021/05/31 MySQL
Redis基本数据类型Set常用操作命令
2022/06/01 Redis