编写Python爬虫抓取暴走漫画上gif图片的实例分享


Posted in Python onApril 20, 2016

本文要介绍的爬虫是抓取暴走漫画上的GIF趣图,方便离线观看。爬虫用的是python3.3开发的,主要用到了urllib、request和BeautifulSoup模块。

urllib模块提供了从万维网中获取数据的高层接口,当我们用urlopen()打开一个URL时,就相当于我们用Python内建的open()打开一个文件。但不同的是,前者接收一个URL作为参数,并且没有办法对打开的文件流进行seek操作(从底层的角度看,因为实际上操作的是socket,所以理所当然地没办法进行seek操作),而后者接收的是一个本地文件名。

Python的BeautifulSoup模块,可以帮助你实现HTML和XML的解析
先说一下,一般写网页爬虫,即抓取网页的html源码等内容,然后分析,提取相应的内容。
这种分析html内容的工作,如果只是用普通的正则表达式re模块去一点点匹配的话,对于内容简单点的网页分析,还是基本够用。
但是对于工作量很大,要解析内容很繁杂的html,那么用re模块,就会发现无法实现,或很难实现。
而使用beautifulsoup模块去帮你实现分析html源码的工作的话,你就会发现,事情变得如此简单,极大地提高了分析html源码的效率。
注:BeautifulSoup是第三方库,我使用的是bs4。urllib2在python3中被分配到了urllib.request中,文档中的原文如下。
Note:The urllib2 module has been split across several modules in Python 3 named urllib.requestand urllib.error.
爬虫源代码如下

# -*- coding: utf-8 -*-

import urllib.request
import bs4,os

page_sum = 1 #设置下载页数

path = os.getcwd()
path = os.path.join(path,'暴走GIF')
if not os.path.exists(path):
  os.mkdir(path)                 #创建文件夹

url = "http://baozoumanhua.com/gif/year"   #url地址
headers = {                     #伪装浏览器
  'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)'
         ' Chrome/32.0.1700.76 Safari/537.36'
}

for count in range(page_sum):
  req = urllib.request.Request(
    url = url+str(count+1),
    headers = headers
  )
  print(req.full_url)
  content = urllib.request.urlopen(req).read()

  soup = bs4.BeautifulSoup(content)          # BeautifulSoup
  img_content = soup.findAll('img',attrs={'style':'width:460px'})

  url_list = [img['src'] for img in img_content]   #列表推导 url
  title_list = [img['alt'] for img in img_content]  #图片名称

  for i in range(url_list.__len__()) :
    imgurl = url_list[i]
    filename = path + os.sep +title_list[i] + ".gif"
    print(filename+":"+imgurl)             #打印下载信息
    urllib.request.urlretrieve(imgurl,filename)    #下载图片

在第15行可以修改下载页数,将此文件保存为baozougif.py,使用命令python baozougif.py运行后在同目录下会生成「暴走GIF」的文件夹,所有的图片会自动下载到该目录中。

Python 相关文章推荐
Python中使用PIL库实现图片高斯模糊实例
Feb 08 Python
Python做文本按行去重的实现方法
Oct 19 Python
Python编程求解二叉树中和为某一值的路径代码示例
Jan 04 Python
TensorFlow实现Batch Normalization
Mar 08 Python
Django Rest framework之认证的实现代码
Dec 17 Python
对python mayavi三维绘图的实现详解
Jan 08 Python
详解python配置虚拟环境
Apr 08 Python
Python中如何导入类示例详解
Apr 17 Python
PyCharm取消波浪线、下划线和中划线的实现
Mar 03 Python
python3实现将json对象存入Redis以及数据的导入导出
Jul 16 Python
python动态规划算法实例详解
Nov 22 Python
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
Jun 11 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
Apr 20 #Python
Python实现HTTP协议下的文件下载方法总结
Apr 20 #Python
详解Python命令行解析工具Argparse
Apr 20 #Python
利用Python如何生成随机密码
Apr 20 #Python
Python自动化部署工具Fabric的简单上手指南
Apr 19 #Python
python实现简单socket通信的方法
Apr 19 #Python
python实现域名系统(DNS)正向查询的方法
Apr 19 #Python
You might like
用PHP生成静态HTML速度快类库
2007/03/18 PHP
PHP中echo,print_r与var_dump区别分析
2014/09/29 PHP
php简单实现快速排序的方法
2015/04/04 PHP
四个常见html网页乱码问题及解决办法
2015/09/08 PHP
ThinkPHP表单数据智能写入create方法实例分析
2015/09/27 PHP
PHP 常用时间函数资料整理
2016/10/22 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
让JavaScript拥有类似Lambda表达式编程能力的方法
2010/09/12 Javascript
jQuery 图片切换插件(代码比较少)
2012/05/07 Javascript
js Map List 遍历使用示例
2013/07/10 Javascript
jquery 快速回到页首的方法
2013/12/05 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
JavaScript中绑定事件的三种方式及去除绑定
2016/11/05 Javascript
vue.js评论发布信息可插入QQ表情功能
2017/08/08 Javascript
webuploader分片上传的实现代码(前后端分离)
2018/09/10 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
使用layui的layer组件做弹出层的例子
2019/09/27 Javascript
jQuery实现html可联动的百分比进度条
2020/03/26 jQuery
微信小程序纯文本实现@功能
2020/04/08 Javascript
js实现车辆管理系统
2020/08/26 Javascript
英国皇家造币厂:The Royal Mint
2018/10/05 全球购物
vue+django实现下载文件的示例
2021/03/24 Vue.js
办公室文员工作自我评价
2013/12/01 职场文书
会计学生自我鉴定
2014/02/06 职场文书
乡镇八一建军节活动方案
2014/08/24 职场文书
2015届本科毕业生自我鉴定
2014/09/27 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
创业计划书之小型广告公司
2019/10/22 职场文书
你真的了解PHP中的引用符号(&)吗
2021/05/12 PHP
Python-OpenCV教程之图像的位运算详解
2021/06/21 Python
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
2021/10/16 Python
JavaScript实现优先级队列
2021/12/06 Javascript