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 相关文章推荐
ssh批量登录并执行命令的python实现代码
May 25 Python
python安装教程 Pycharm安装详细教程
May 02 Python
Python利用BeautifulSoup解析Html的方法示例
Jul 30 Python
Python 利用pydub库操作音频文件的方法
Jan 09 Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 Python
django自定义模板标签过程解析
Dec 14 Python
python使用协程实现并发操作的方法详解
Dec 27 Python
Python Handler处理器和自定义Opener原理详解
Mar 05 Python
解决tensorflow读取本地MNITS_data失败的原因
Jun 22 Python
python使用matplotlib绘制折线图的示例代码
Sep 22 Python
python3实现飞机大战
Nov 29 Python
Elasticsearch 批量操作
Apr 19 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和ACCESS写聊天室(六)
2006/10/09 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
thinkphp命名空间用法实例详解
2015/12/30 PHP
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
javascript 自定义事件初探
2009/08/21 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
Jquery选择子控件"大于号"和" "区别介绍及使用示例
2013/06/25 Javascript
基于js disabled="false"不起作用的解决办法
2013/06/26 Javascript
JQuery中DOM实现事件移除的方法
2015/06/13 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
Node+Express+MongoDB实现登录注册功能实例
2017/04/23 Javascript
CSS3+JavaScript实现翻页幻灯片效果
2017/06/28 Javascript
vue-music关于Player播放器组件详解
2017/11/28 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
如何为你的JavaScript代码日志着色详解
2019/04/08 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
解决layui数据表格table的横向滚动条显示问题
2019/09/04 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
[07:27]DOTA2卡尔工作室 英雄介绍水晶室女篇
2013/06/21 DOTA
python常见排序算法基础教程
2017/04/13 Python
Python 操作MySQL详解及实例
2017/04/30 Python
python逐行读写txt文件的实例讲解
2018/04/03 Python
python游戏开发之视频转彩色字符动画
2019/04/26 Python
Python+PyQt5+MySQL实现天气管理系统
2020/06/16 Python
Python使用OpenPyXL处理Excel表格
2020/07/02 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
工程造价专业大专生求职信
2013/10/06 职场文书
企业管理部经理岗位职责
2013/12/24 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
小班下学期幼儿评语
2014/12/30 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
Python必备技巧之字符数据操作详解
2022/03/23 Python