Python爬虫之网页图片抓取的方法


Posted in Python onJuly 16, 2018

一、引入

这段时间一直在学习Python的东西,以前就听说Python爬虫多厉害,正好现在学到这里,跟着小甲鱼的Python视频写了一个爬虫程序,能实现简单的网页图片下载。

二、代码

__author__ = "JentZhang"
import urllib.request
import os
import random
import re
def url_open(url):
  '''
  打开网页
  :param url:
  :return:
  '''
  req = urllib.request.Request(url)
  req.add_header('User-Agent',
          'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36')
  # 应用代理
  '''
  proxyies = ["111.155.116.237:8123","101.236.23.202:8866","122.114.31.177:808"]
  proxy = random.choice(proxyies)
  proxy_support = urllib.request.ProxyHandler({"http": proxy})
  opener = urllib.request.build_opener(proxy_support)
  urllib.request.install_opener(opener)
  '''
  response = urllib.request.urlopen(url)
  html = response.read()
  return html
def save_img(folder, img_addrs):
  '''
  保存图片
  :param folder: 要保存的文件夹
  :param img_addrs: 图片地址(列表)
  :return:
  '''
  # 创建文件夹用来存放图片
  if not os.path.exists(folder):
    os.mkdir(folder)
  os.chdir(folder)
  for each in img_addrs:
    filename = each.split('/')[-1]
    try:
      with open(filename, 'wb') as f:
        img = url_open("http:" + each)
        f.write(img)
    except urllib.error.HTTPError as e:
      # print(e.reason)
      pass
  print('完毕!')
def find_imgs(url):
  '''
  获取全部的图片链接
  :param url: 连接地址
  :return: 图片地址的列表
  '''
  html = url_open(url).decode("utf-8")
  img_addrs = re.findall(r'src="(.+?\.gif)', html)
  return img_addrs
def get_page(url):
  '''
  获取当前一共有多少页的图片
  :param url: 网页地址
  :return:
  '''
  html = url_open(url).decode('utf-8')
  a = html.find("current-comment-page") + 23
  b = html.find("]</span>", a)
  return html[a:b]
def download_mm(url="http://jandan.net/ooxx/", folder="OOXX", pages=1):
  '''
  主程序(下载图片)
  :param folder:默认存放的文件夹
  :param pages: 下载的页数
  :return:
  '''
  page_num = int(get_page(url))
  for i in range(pages):
    page_num -= i
    page_url = url + "page-" + str(page_num) + "#comments"
    img_addrs = find_imgs(page_url)
    save_img(folder, img_addrs)
if __name__ == "__main__":
  download_mm()

三、总结

由于代码中访问的网址已经运用了反爬虫的算法。所以已经爬不到想要的图片啦,so,就当是记了个爬虫的笔记吧。仅供学习参考[捂脸]。。。。

最后:我把jpg格式换成gif,还能爬到可怜的一张gif图:

Python爬虫之网页图片抓取的方法 

第一张正是反爬虫机制的一个图片占位符,完全没有任何内容

总结

以上所述是小编给大家介绍的Python爬虫之网页图片抓取的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python学生信息管理系统
Mar 13 Python
TensorFlow的权值更新方法
Jun 14 Python
django如何连接已存在数据的数据库
Aug 14 Python
关于python下cv.waitKey无响应的原因及解决方法
Jan 10 Python
python多线程同步之文件读写控制
Feb 25 Python
Django框架models使用group by详解
Mar 11 Python
python中adb有什么功能
Jun 07 Python
python爬虫请求头的使用
Dec 01 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
Jan 05 Python
VSCODE配置Markdown及Markdown基础语法详解
Jan 19 Python
django注册用邮箱发送验证码的实现
Apr 18 Python
PyQt5结合QtDesigner实现文本框读写操作
Jun 11 Python
python编辑用户登入界面的实现代码
Jul 16 #Python
python 反向输出字符串的方法
Jul 16 #Python
解决python3 urllib 链接中有中文的问题
Jul 16 #Python
如何用Python实现简单的Markdown转换器
Jul 16 #Python
详解python里的命名规范
Jul 16 #Python
Python 2.7中文显示与处理方法
Jul 16 #Python
Python定时任务sched模块用法示例
Jul 16 #Python
You might like
php fckeditor 调用的函数
2009/06/21 PHP
让PHP COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
php MessagePack介绍
2013/10/06 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
2014/09/27 PHP
PHP使用fopen与file_get_contents读取文件实例分享
2016/03/04 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
2019/10/17 PHP
javascript面向对象的方式实现的弹出层效果代码
2010/01/28 Javascript
JavaScript编程中容易出BUG的几点小知识
2015/01/31 Javascript
对JavaScript中this指针的新理解分享
2015/01/31 Javascript
AngularJS数据源的多种获取方式汇总
2016/02/02 Javascript
JavaScript中的Array 对象(数组对象)
2016/06/02 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
jQuery插件Echarts实现的双轴图效果示例【附demo源码下载】
2017/03/04 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
2017/09/14 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
2019/07/16 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
微信小程序云开发如何实现数据库自动备份实现
2019/08/16 Javascript
Vue实现开关按钮拖拽效果
2020/09/22 Javascript
[01:28]2014DOTA2国际邀请赛中国区预选赛四大豪门直升机抵达会场
2014/05/24 DOTA
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
为Python程序添加图形化界面的教程
2015/04/29 Python
Python基于pillow判断图片完整性的方法
2016/09/18 Python
Python中is与==判断的区别
2017/03/28 Python
python itchat实现微信好友头像拼接图的示例代码
2017/08/14 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
Python实现电视里的5毛特效实例代码详解
2020/05/15 Python
Python的控制结构之For、While、If循环问题
2020/06/30 Python
python二维图制作的实例代码
2020/12/03 Python
iKRIX意大利网上商店:男女豪华服装和配件
2019/10/09 全球购物
初三学习决心书
2014/03/11 职场文书
义诊活动通知
2015/04/24 职场文书
人力资源部工作计划
2019/05/14 职场文书
Elasticsearch 聚合查询和排序
2022/04/19 Python