Python+BeautifulSoup抓取暴走漫画页面图片
使用Python中的BeautifulSoup(bs4)包抓取暴走漫画网站中的热门帖子中的图片。
首先附上参考资料,之前在OSC上有人写了个抓取豆瓣妹子图片的帖子,参考人家的代码,自己重新弄了一下,当然不能像豆瓣妹子那样直接搜索所有的<img>标签啦,因为网页中含有广告啊,头像啊,表情之类的,我只想抓取热门中的内容图片嘛。
这时候就要充分的利用BeautifulSoup啦,先附上参考资料
首先分析暴走漫画网站的html,发现所有的热门内容的<img>标签都在class为img-wrap的<div>中,这样就好办了,完全避免了抓取除了这个div之外的图片,首先需要获取页面中class为‘img-wrap’的所有<div>,使用以下代码:
my_girl = soup.find_all('div',class_='img-wrap')
这时my_girl是一个list对象,我们需要的是遍历所有的class为img-wrap的<div>,找到其中的<img>标签,代码如下:
for girl in my_girl:jokes = girl.find('img')link = jokes.get('src')
在这里要提醒以下,find_all与find是不同的,千万不要用混了,find_all是返回的list对象,而find只是返回第一个,找到了就返回,所以在find_all之后,一定要用for循环遍历一遍,这样就可以啦。
整体的实现思路如下:
1. 首先创建文件夹,取名“暴走漫画”,就在当前目录下,存在的话就不重新创建了
2. 然后写一个函数,def,起名叫page_loop,默认page是1
3. 定义url,page就是url中分页的参数,当然了,url也可以函数传进来或者是系统读取进来,后期改进吧,使用BeautifulSoup打开URL
4. 然后就是上面的找标签操作了,如果要获取其他的网页中的其他信息,一定要好好地分析下网页的结构
5. 获取<img>标签的<src>属性之后,把这个连接取出来,使用with,把链接中的图片存到文件夹中
6. page+1,递归函数,获取下一页的图片
短短的二三十行代码,很有效,4不4.你也可以使用py2exe将程序转成Windows上可执行的,然后发给盆友吧,我就是这么做的。
需要改进的地方:
1. Shao说,最好可以手输URL或者读取配置文件的URL,获取图片,要是文件夹名称可以自己定义就更好了,可以弄
2. 页面结束判断没有做啊,到时候页面不存在就会报404,程序也会退出了,需改进
3. 在存储图片的时候,取的是原图的7位名称(src中URL后11位),如果不够7位就会报错,我之前的做法是用当前时间+随机字母+文件名后一位作为新的图片的文件名,但是这么操作也有问题,就是如果我重新爬的话,图片会重复,有待商榷
4. 如果用上多线程抓取和分布式抓取,就更好了,效率更高
5. 抓取的频率也不要太快,如果被检测了,就抓不到了,最好写个延时
需要注意的地方:
Python对缩进是非常非常非常之敏感的,如果你的编码过程中出现以下提示
那就是说明你空格和Tab用混了,不要慌不要急,按照以下方法来:全选——Alt+F5,轻松搞定
然后附上豆瓣妹子和暴走漫画的抓取结果吧,暴漫的话,留着自己慢慢看,也可以放到自己的网站里,豆瓣妹子嘛,还在犹豫什么宅男们,赶快收藏吧:
最后的最后,附上豆瓣妹子和暴走漫画的代码:
暴走漫画:
# -*- coding:utf8 -*-
# 2013.12.36 19:41 wnlo-c209
# 抓取dbmei.com的图片。from bs4 import BeautifulSoup
import os, sys, urllib2,time,random# 创建文件夹,昨天刚学会
path = os.getcwd() # 获取此脚本所在目录
new_path = os.path.join(path,u'暴走漫画')
if not os.path.isdir(new_path):os.mkdir(new_path)def page_loop(page=1):url = 'http://baozoumanhua.com/all/hot/page/%s?sv=1389537379' % pagecontent = urllib2.urlopen(url)soup = BeautifulSoup(content)my_girl = soup.find_all('div',class_='img-wrap')for girl in my_girl:jokes = girl.find('img')link = jokes.get('src')flink = linkprint flinkcontent2 = urllib2.urlopen(flink).read()#with open(u'暴走漫画'+'/'+time.strftime('%H-%M-%S')+random.choice('qwertyuiopasdfghjklzxcvbnm')+flink[-5:],'wb') as code: #在OSC上现学的with open(u'暴走漫画'+'/'+flink[-11:],'wb') as code:code.write(content2)page = int(page) + 1print u'开始抓取下一页'print 'the %s page' % pagepage_loop(page)page_loop()
豆瓣妹子:
# -*- coding:utf8 -*-
# 2013.12.36 19:41 wnlo-c209
# 抓取dbmei.com的图片。from bs4 import BeautifulSoup
import os, sys, urllib2# 创建文件夹,昨天刚学会
path = os.getcwd() # 获取此脚本所在目录
new_path = os.path.join(path,u'豆瓣妹子')
if not os.path.isdir(new_path):os.mkdir(new_path)def page_loop(page=0):url = 'http://www.dbmeizi.com/?p=%s' % pagecontent = urllib2.urlopen(url)soup = BeautifulSoup(content)my_girl = soup.find_all('img') # 加入结束检测,写的不好....if my_girl ==[]:print u'已经全部抓取完毕'sys.exit(0)print u'开始抓取'for girl in my_girl:link = girl.get('src')flink = 'http://www.dbmeizi.com/' + linkprint flinkcontent2 = urllib2.urlopen(flink).read()with open(u'豆瓣妹子'+'/'+flink[-11:],'wb') as code:#在OSC上现学的code.write(content2)page = int(page) + 1print u'开始抓取下一页'print 'the %s page' % pagepage_loop(page)page_loop()
Python+BeautifulSoup抓取暴走漫画页面图片相关推荐
- python学习-抓取知乎图片
python学习-抓取知乎图片 #!/bin/usr/env python3__author__ = 'nxz'""" 抓取知乎图片 webdriver Chromedr ...
- 用python画爱心动图_编写Python爬虫抓取暴走漫画上gif图片的实例分享
本文要介绍的爬虫是抓取暴走漫画上的GIF趣图,方便离线观看.爬虫用的是python3.3开发的,主要用到了urllib.request和BeautifulSoup模块. urllib模块提供了从万维网 ...
- gif提取 python_编写Python爬虫抓取暴走漫画上gif图片的实例分享
本文要介绍的爬虫是抓取暴走漫画上的GIF趣图,方便离线观看.爬虫用的是python3.3开发的,主要用到了urllib.request和BeautifulSoup模块. urllib模块提供了从万维网 ...
- Python爬虫抓取指定网页图片代码实例
更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接:好看站 http://www.nrso.net/ 高州阳光论坛https://www.hnthzk.com/ 想 ...
- Python 爬虫: 抓取花瓣网图片
接触Python也好长时间了,一直没什么机会使用,没有机会那就自己创造机会!呐,就先从爬虫开始吧,抓点美女图片下来. 废话不多说了,讲讲我是怎么做的. 1. 分析网站 想要下载图片,只要知道图片的地址 ...
- python beautifulsoup抓取网页内容_利用Python和Beautiful Soup抓取网页内容
利用Python和Beautiful Soup抓取网页内容 Posted on 2012-08-09 00:08 SamWei 阅读(381) 评论(1) 编辑 收藏 Python 3中提供了url打 ...
- python+ BeautifulSoup抓取“全国行政区划信息查询平台”的省市区信息
全国行政区划信息查询平台地址:http://xzqh.mca.gov.cn/map 检查网页源码: 检查网页源码可以发现: 所有省级信息全部在javaScript下的json中,会在页面加载时加载js ...
- python抓取股票竞价数据_【整理】用Python+beautifulsoup抓取股票数据
[刚开始写总结,读者如果对我的内容有任何建议欢迎留言反馈,或直接加QQ1172617666,期待交流] 先贴上代码,再详细的写一下在写这些代码的过程中遇到的问题,解决的方法. 这些代码完成的任务是:访 ...
- python爬虫抓取淘宝图片
训练模型需要data,于是从网上抓取相关图片集,之后进行筛选标注. import urllib.request import rekeyword = '骚猪'#定义搜索关键字 keyword = ur ...
最新文章
- ECUG 全球技术大会重回上海!
- swift-初探webView与JS交互
- 图论中的知识点(等待补充和更新)
- make的使用和Makefile规则和编程及其基本命令(简单)
- 微信为什么不丢消息?
- JZOJ 1321. 灯
- ajax的核心有哪些,ajax的核心
- 【Algorithm】冒泡排序
- Java归去来第3集:Eclipse中给动态模块升级
- Julia-整数和浮点数
- StarUml:Exception EOleSysError in module StarUML.ex
- WORKBENCHSCDM导入CAD文件报错?
- java创建窗口_java如何创建一个窗口出来
- 手机游戏后台服务整体架构
- Linux中MISC驱动简介及其简单使用
- CKFinder3.5.1整合springboot修复bug免费
- 关于计算机语言最高奖项 图灵奖 的12位得主!你认识几个?
- OA系统与MES系统的异同点
- 改变世界的十大经典物理实验及十大著名思想实验
- 新闻与传播c刊_传媒湃|3本新闻传播类期刊入围新版C刊扩展目录
热门文章
- Linux安装jdk9
- 相约2008:2008是一个合数,求出此合数最多由多少个最小不同质数和组成, 并按要求从小到大输出这些质数
- python drf_python-Django DRF更新用户
- 儿童七彩浏览器 隐私声明
- MTCNN算法与代码理解—人脸检测和人脸对齐联合学习
- nginx-负载均衡反向代理
- c# 定位内存快速增长_C#和halcon的混编程序出现序内存泄露、句柄持续增加、视觉程序运行越来越慢等问题的处理...
- Android开发:集成高德地图实现定位、检索周边地址
- 扫描件转化为word文档_如何将旧文档转换为Word 2013
- TouchSlide.js的使用