编写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操作数据库之sqlite3打开数据库、删除、修改示例
Mar 13 Python
Python运算符重载用法实例
May 28 Python
python实现汉诺塔方法汇总
Jul 25 Python
python中Switch/Case实现的示例代码
Nov 09 Python
python shell根据ip获取主机名代码示例
Nov 25 Python
Python下载网络文本数据到本地内存的四种实现方法示例
Feb 05 Python
TensorFlow实现卷积神经网络CNN
Mar 09 Python
windows10下python3.5 pip3安装图文教程
Apr 02 Python
python3中rank函数的用法
Nov 27 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
python中如何设置代码自动提示
Jul 15 Python
pycharm 2020 1.1的安装流程
Sep 29 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网页的代码
2010/03/04 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
2014/09/22 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
php去掉文件前几行的方法
2015/07/29 PHP
joomla数据库操作示例代码
2016/01/06 PHP
PHP实现多级分类生成树的方法示例
2017/02/07 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
Jquery 获取指定标签的对象及属性的设置与移除
2014/05/29 Javascript
使用JQuery库提供的扩展功能实现自定义方法
2014/09/09 Javascript
javascript 闭包详解
2015/07/02 Javascript
js实现五星评价功能
2017/03/08 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
2020/06/29 Javascript
javascript 玩转Date对象(实例讲解)
2017/07/11 Javascript
深入理解vue-router之keep-alive
2017/08/31 Javascript
Vue在页面数据渲染完成之后的调用方法
2018/09/11 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
2019/04/14 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
2019/12/01 Javascript
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
[46:49]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.19
2020/12/24 DOTA
简单谈谈python的反射机制
2016/06/28 Python
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
python cv2截取不规则区域图片实例
2019/12/21 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
写出程序把一个链表中的接点顺序倒排
2014/04/28 面试题
应届生英语教师求职信
2013/11/05 职场文书
财务助理岗位职责
2013/11/10 职场文书
啤酒节策划方案
2014/05/28 职场文书
安全生产标语
2014/06/06 职场文书
求职信的正确写法
2014/07/10 职场文书
公司年会开场白
2015/06/01 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server