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 sort、sorted高级排序技巧
Nov 21 Python
Python中用startswith()函数判断字符串开头的教程
Apr 07 Python
使用python爬虫实现网络股票信息爬取的demo
Jan 05 Python
教你用一行Python代码实现并行任务(附代码)
Feb 02 Python
Python断言assert的用法代码解析
Feb 03 Python
Python测试人员需要掌握的知识
Feb 08 Python
Python制作exe文件简单流程
Jan 24 Python
python多线程与多进程及其区别详解
Aug 08 Python
使用python实现男神女神颜值打分系统(推荐)
Oct 31 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
Mar 16 Python
PyCharm中如何直接使用Anaconda已安装的库
May 28 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
Dec 14 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/08/30 PHP
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
php调用dll的实例操作动画与代码分享
2012/08/14 PHP
深入分析php之面向对象
2013/05/15 PHP
url 特殊字符 传递参数解决方法
2010/01/01 Javascript
jquery 全局AJAX事件使用代码
2010/11/05 Javascript
浅析jQuery中常用的元素查找方法总结
2013/07/04 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
浅谈javascript基础之客户端事件驱动
2016/06/10 Javascript
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
2016/11/21 NodeJs
Vue2实现组件props双向绑定
2016/12/02 Javascript
详解PHP中pathinfo()函数导致的安全问题
2017/01/05 Javascript
详解vue.js+UEditor集成 [前后端分离项目]
2017/07/07 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
vue.js实现的绑定class操作示例
2018/07/06 Javascript
vue弹窗插件实战代码
2018/09/08 Javascript
vue生命周期与钩子函数简单示例
2019/03/13 Javascript
优化Vue项目编译文件大小的方法步骤
2019/05/27 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
[01:01:36]Optic vs paiN 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
Python 2与Python 3版本和编码的对比
2017/02/14 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
python爬虫工具例举说明
2020/11/30 Python
HTML5实现锚点时请使用id取代name
2013/09/06 HTML / CSS
trivago美国:全球最大的酒店价格比较网站
2018/01/18 全球购物
英国花园、DIY、电器和家居用品商店:Robert Dyas
2019/03/18 全球购物
捷克家电和家具购物网站:OKAY.cz
2020/07/23 全球购物
单位委托书怎么写
2014/09/21 职场文书
美术教师个人工作总结
2015/02/06 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
pandas中DataFrame重置索引的几种方法
2021/05/24 Python