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如何获取列表(List)的中位数
Aug 12 Python
Python读取图片属性信息的实现方法
Sep 11 Python
python difflib模块示例讲解
Sep 13 Python
用Python实现将一张图片分成9宫格的示例
Jul 05 Python
Django使用Jinja2模板引擎的示例代码
Aug 09 Python
python sorted函数的小练习及解答
Sep 18 Python
python实现广度优先搜索过程解析
Oct 19 Python
Python下应用opencv 实现人脸检测功能
Oct 24 Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 Python
如何Tkinter模块编写Python图形界面
Oct 14 Python
python中append函数用法讲解
Dec 11 Python
Python 打印自己设计的字体的实例讲解
Jan 04 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 字符转义 注意事项
2009/05/27 PHP
php对二维数组进行排序的简单实例
2013/12/19 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
php cookie 详解使用实例
2016/11/03 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
2019/12/11 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
2020/04/13 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
ExtJS GTGrid 简单用户管理
2009/07/01 Javascript
原始的js代码和jquery对比体会
2013/09/10 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
15款jQuery分布引导插件分享
2015/02/04 Javascript
全面解析Bootstrap布局组件应用
2016/02/22 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
2016/06/02 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
vue中倒计时组件的实例代码
2018/07/06 Javascript
JS实现的小火箭发射动画效果示例
2018/12/08 Javascript
分享JS表单验证源码(带错误提示及密码等级)
2020/01/05 Javascript
深入理解 ES6中的 Reflect用法
2020/07/18 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
Vue解决移动端弹窗滚动穿透问题
2020/12/15 Vue.js
python实现倒计时的示例
2014/02/14 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
使用Python函数进行模块化的实现
2019/11/15 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
CSS3 渐变(Gradients)之CSS3 径向渐变
2016/07/08 HTML / CSS
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
澳大利亚家具商店:Freedom
2020/12/17 全球购物
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
物业管理计划书
2014/01/10 职场文书
小班重阳节活动方案
2014/02/08 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
父亲节感言
2015/08/03 职场文书