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学习之面向对象【入门初级篇】
Jan 21 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
May 24 Python
requests和lxml实现爬虫的方法
Jun 11 Python
windows环境下tensorflow安装过程详解
Mar 30 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
Jun 22 Python
解决pandas展示数据输出时列名不能对齐的问题
Nov 18 Python
python如何把字符串类型list转换成list
Feb 18 Python
Python Numpy,mask图像的生成详解
Feb 19 Python
windows下Pycharm安装opencv的多种方法
Mar 05 Python
如何写python的配置文件
Jun 07 Python
Python基于staticmethod装饰器标示静态方法
Oct 17 Python
聊一聊python常用的编程模块
May 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中Ctype函数用法详解
2014/12/09 PHP
PHP将进程作为守护进程的方法
2015/03/19 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
2018/05/31 PHP
简单的JS多重继承示例
2008/03/13 Javascript
JavaScript Timer实现代码
2010/02/17 Javascript
js打印纸函数代码(递归)
2010/06/18 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
nodejs加密Crypto的实例代码
2016/07/07 NodeJs
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
2017/01/17 Javascript
巧用weui.topTips验证数据的实例
2017/04/17 Javascript
Angular 1.x个人使用的经验小结
2017/07/19 Javascript
vue+axios新手实践实现登陆的示例代码
2018/06/06 Javascript
如何让node运行es6模块文件及其原理详解
2018/12/11 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
2019/07/05 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
jQuery实现数字华容道小游戏(实例代码)
2020/01/16 jQuery
Python常见格式化字符串方法小结【百分号与format方法】
2016/09/18 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
python矩阵的转置和逆转实例
2018/12/12 Python
python树莓派红外反射传感器
2019/01/21 Python
python获取交互式ssh shell的方法
2019/02/14 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
python机器学习库scikit-learn:SVR的基本应用
2019/06/26 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
python字符串格式化方式解析
2019/10/19 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
python右对齐的实例方法
2020/07/05 Python
Bowflex美国官方网站:高级家庭健身器材
2017/12/22 全球购物
Unix控制后台进程都有哪些进程
2016/09/22 面试题
文明美德伴我成长演讲稿
2014/05/12 职场文书
邀请函模板
2015/02/02 职场文书
党小组考察意见
2015/06/02 职场文书
党小组评议意见
2015/06/02 职场文书
美元符号 $
2022/02/17 杂记
AudioContext 实现音频可视化(web技术分享)
2022/02/24 Javascript