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 splitlines使用技巧
Sep 06 Python
Python编写生成验证码的脚本的教程
May 04 Python
python实现爬取千万淘宝商品的方法
Jun 30 Python
python生成随机密码或随机字符串的方法
Jul 03 Python
Python实现在线音乐播放器
Mar 03 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
Python实现运行其他程序的四种方式实例分析
Aug 17 Python
Python使用修饰器执行函数的参数检查功能示例
Sep 26 Python
python 简单备份文件脚本v1.0的实例
Nov 06 Python
Python读取mat文件,并转为csv文件的实例
Jul 04 Python
使用python创建生成动态链接库dll的方法
May 09 Python
利用Python实现学生信息管理系统的完整实例
Dec 30 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/11/05 PHP
windows中为php安装mongodb与memcache
2015/01/06 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
PHP调用接口API封装的例子
2019/10/11 PHP
获取dom元素那些讨厌的位置封装代码
2010/06/23 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
JS使用parseInt解析数字实现求和的方法
2015/08/05 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
2016/12/26 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
2017/04/04 jQuery
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
ZK中使用JS读取客户端txt文件内容问题
2019/11/07 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
2020/08/12 Javascript
Python中使用copy模块实现列表(list)拷贝
2015/04/14 Python
Python导入oracle数据的方法
2015/07/10 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
Pandas之groupby( )用法笔记小结
2019/07/23 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
2016/03/14 HTML / CSS
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
阿里巴巴美国:Alibaba美国
2019/11/24 全球购物
秋季开学典礼主持词
2014/03/19 职场文书
知识改变命运演讲稿
2014/05/21 职场文书
物流专业自荐信
2014/05/23 职场文书
2014年德育工作总结
2014/11/20 职场文书
担保公司2015年终工作总结
2015/10/14 职场文书
pytorch 权重weight 与 梯度grad 可视化操作
2021/06/05 Python