编写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循环语句之break与continue的用法
Oct 14 Python
Python机器学习算法之k均值聚类(k-means)
Feb 23 Python
tensorflow实现softma识别MNIST
Mar 12 Python
python版百度语音识别功能
Jul 09 Python
python代码编写计算器小程序
Mar 30 Python
解决django服务器重启端口被占用的问题
Jul 26 Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 Python
对tensorflow 中tile函数的使用详解
Feb 07 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
Django之腾讯云短信的实现
Jun 12 Python
python 中的命名空间,你真的了解吗?
Aug 19 Python
如何在scrapy中捕获并处理各种异常
Sep 28 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
信用卡效验程序
2006/10/09 PHP
PHP程序员最常犯的11个MySQL错误小结
2010/11/20 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
ThinkPHP分页类使用详解
2014/03/05 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
2017/05/20 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
动态加载js的几种方法
2006/10/23 Javascript
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
jquery cookie插件代码类
2009/05/26 Javascript
js改变embed标签src值的方法
2015/04/10 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
jquery中绑定事件的异同
2017/02/28 Javascript
开发Vue树形组件的示例代码
2017/12/21 Javascript
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
Python设计模式之观察者模式实例
2014/04/26 Python
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
python+selenium实现京东自动登录及秒杀功能
2017/11/18 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
python实现可视化动态CPU性能监控
2018/06/21 Python
Python爬虫PyQuery库基本用法入门教程
2018/08/04 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
python 递归相关知识总结
2021/03/03 Python
CSS3的Flexbox布局的简明入门指南
2016/04/08 HTML / CSS
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
最新大学毕业求职简历的自我评价
2013/10/18 职场文书
党员年终民主评议的自我评价
2013/11/05 职场文书
21岁生日感言
2014/02/27 职场文书
个人总结与自我评价
2015/02/14 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis
html+css实现滚动到元素位置显示加载动画效果
2021/08/02 HTML / CSS
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript