编写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 切片和range()用法说明
Mar 24 Python
Python将xml和xsl转换为html的方法
Mar 10 Python
python判断字符串是否包含子字符串的方法
Mar 24 Python
python查看zip包中文件及大小的方法
Jul 09 Python
Python的MongoDB模块PyMongo操作方法集锦
Jan 05 Python
Python实现约瑟夫环问题的方法
May 03 Python
Python中join函数简单代码示例
Jan 09 Python
python开启debug模式的方法
Jun 27 Python
使用django实现一个代码发布系统
Jul 18 Python
详解Python3 pandas.merge用法
Sep 05 Python
如何查看Django ORM执行的SQL语句的实现
Apr 20 Python
虚拟环境及venv和virtualenv的区别说明
Feb 05 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 array_merge下进行数组合并的代码
2008/07/22 PHP
PHP 多维数组排序(usort,uasort)
2010/06/30 PHP
php实现无限级分类实现代码(递归方法)
2011/01/01 PHP
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
php7基于递归实现删除空文件夹的方法示例
2017/06/15 PHP
客户端静态页面玩分页
2006/06/26 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
2013/11/22 Javascript
javascript面向对象之访问对象属性的两种方式分析
2015/01/13 Javascript
JQuery+CSS实现图片上放置按钮的方法
2015/05/29 Javascript
JSONP基础知识详解
2017/03/19 Javascript
JS如何设置元素样式的方法示例
2017/08/28 Javascript
浅析Vue中method与computed的区别
2018/03/06 Javascript
JavaScript中字符串的常用操作方法及特殊字符
2018/03/18 Javascript
详解js的视频和音频采集
2018/08/09 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
2018/08/30 Javascript
axios取消请求的实践记录分享
2018/09/26 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
2019/06/21 Javascript
[01:03:42]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[01:02:32]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第二场 2月26日
2021/03/11 DOTA
Anaconda多环境多版本python配置操作方法
2017/09/12 Python
python 矩阵增加一行或一列的实例
2018/04/04 Python
Django框架模板介绍
2019/01/15 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
python set集合使用方法解析
2019/11/05 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
在keras里实现自定义上采样层
2020/06/28 Python
Canvas与Image互相转换示例代码
2013/08/09 HTML / CSS
售后求职信范文
2014/03/15 职场文书
党课培训主持词
2014/04/01 职场文书
企业整改报告范文
2014/11/08 职场文书
pandas:get_dummies()与pd.factorize()的用法及区别说明
2021/05/21 Python
MongoDB日志切割的三种方式总结
2021/09/15 MongoDB
英镑符号 £
2022/02/17 杂记