Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)
这道题是一道爬虫练习题,需要爬链接http://tieba.baidu.com/p/2166231880里的所有妹子图片,点进链接看一下,这位妹子是日本著名性感女演员——杉本由美,^_^好漂亮啊,赶紧开始爬吧。
以下就是我的爬虫步骤:
一.获取页面
虽然request和beautifulsoup模块方便又好用,但是我还是决定使用传统的urllib和urllib模块,毕竟对这两个模块熟悉之后,就能基本明白爬虫的原理和实现啦。
首先是导入模块,除了前面提到的两个模块,我们还要导入re模块,使用正则表达式来匹配我们想要的内容。
导入模块之后,就可以获取页面了。步骤如下:
1.使用urllib2.Requst( )得到request对象。
这个对象是用于打开一个网页的请求,可以方便的携带一些请求需要的信息,如headers,cookies等数据。
因为我们打开的网页——百度贴吧不需要登录就可以浏览页面,所以request对象只需要headers对象就可以了。
2.使用urllib2.urlopen( )得到response对象。
这个对象是爬虫页面的对象,与文件对象类似,你可以使用read( )来得到response页面对象的源码。
3.使用正则匹配要爬的资源链接
不会正则的同学,可以学一下,很快,一个下午就能学会正则基础啦,至少爬虫使用的正则你就会写啦。我们想要得到页面的所有图片的链接,那就在浏览器中使用CTRL+ALT+c来打开页面查看页面的源码,也就是页面的HTML文本。
找一下图片的标签在哪里,发现所有要下载的图片标签<img>的类都是BDE_image,标签格式都一样,但是帖子中还有广告楼层里面的图片标签也是也是这个类。我可不想下载下来之后浏览美女图片,突然跳出来一个广告图片。
那再仔细看一下页面,发现只要点击只看楼主选项,广告楼层就不见了,同时页面url后面多了几个字符是 ?see_lz=1 。好,那我们直接在我们的请求url后加上这几个字符就行啦,至于其他的楼层,没有了更好^_^,反正其他楼层都是灌水。
ok,那就开始匹配我们想要的链接吧。使用re.compile( )来编译匹配模式,再使用re.findall( )得到所有的图片的src属性,也就是链接的列表。
这就完成了我们爬虫最重要的一步啦。
二.下载链接
下载链接要使用urllib.urlretrieve( ),这个函数可以将你的链接资源下载到本地,如果指定目录的话会下载到目录,否则下载为临时文件。
那就直接迭代我们第一步得到的图片链接列表,一个个全下载下来吧。
到这里,爬这个页面的小练习,就完成啦。
我的代码在这里:
# coding=utf-8
import urllib,urllib2
import re #头信息
header={'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:44.0) Gecko/20100101 Firefox/44.0'} def get_img_url(page_url):#得到页面所有图片的链接 request=urllib2.Request(page_url,headers=header) #生成request对象
reference=urllib2.urlopen(request) #获取页面对象
page=reference.read() #读取页面 regex=re.compile(r'<img.*?class="BDE_Image" src="(.*?)".*?>') #编译正则匹配模式字符串
img_url_list=re.findall(regex,page) #匹配所有图片链接生成列表 return img_url_list def download_img(url_list,img_path): #从图片链接下载图片并存放在指定文件夹
for img_url in url_list:
urllib.urlretrieve(img_url,'%s/%s.jpg'%(img_path,img_url[-8:-5])) #下载图片
print 'done' url='http://tieba.baidu.com/p/2166231880?see_lz=1' #爬虫页面
path='/home/afei/picture' #存放路径
urllist=get_img_url(url)
download_img(urllist,path)
wow,杉本由美真的好漂亮啊,有鼻子有眼的。

Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)的更多相关文章
- Python+Flask+Gunicorn 项目实战(一) 从零开始,写一个Markdown解析器 —— 初体验
(一)前言 在开始学习之前,你需要确保你对Python, JavaScript, HTML, Markdown语法有非常基础的了解.项目的源码你可以在 https://github.com/zhu-y ...
- Python写一个自动点餐程序
Python写一个自动点餐程序 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘记,或者是在地铁/公交上没办法点餐,所以总是没饭吃,只有 ...
- [python] 1、python鼠标点击、移动事件应用——写一个自动下载百度音乐的程序
1.问题描述: 最近百度总爱做一些破坏用户信任度的事——文库金币变券.网盘限速,吓得我赶紧想办法把存在百度云音乐中的歌曲下载到本地. http://yinyueyun.baidu.com/ 可问题是云 ...
- 用 python 写一个年会抽奖小程序
使用 pyinstaller 打包工具常用参数指南 pyinstaller -F demo.py 参数 含义 -F 指定打包后只生成一个exe格式的文件 -D –onedir 创建一个目录,包含exe ...
- Python 网络爬虫 009 (编程) 通过正则表达式来获取一个网页中的所有的URL链接,并下载这些URL链接的源代码
通过 正则表达式 来获取一个网页中的所有的 URL链接,并下载这些 URL链接 的源代码 使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 ...
- python学习(10)字典学习,写一个三级菜单程序
学习了字典的应用.按老师的要求写一个三级菜单程序. 三级菜单程序需求如下: 1.深圳市的区--街道--社区---小区4级 2.建立一个字典,把各级区域都装进字典里 3.用户可以从1级进入2级再进入3级 ...
- python学习(5)写一个二分算法的程序
把之前学习的做一个小结.之前看二分查找法,只能是似而非地看懂大概.现在用这么多天的知识积累已经可以自己写了. 而且在算法书的基础上,把需要找的数字做一个人机互动操作. 另外,初步接触到了 __name ...
- 如何用 Python 写一个简易的抽奖程序
不知道有多少人是被这个头图骗进来的:) 事情的起因是这样的,上周有同学问小编,看着小编的示例代码敲代码,感觉自己也会写了,如果不看的话,七七八八可能也写的出来,但是一旦自己独立写一段程序,感觉到无从下 ...
- python练习册 每天一个小程序 第0013题
# -*-coding:utf-8-*- ''' 题目描述: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-) 地址: http://tieba.baidu.com/p/21 ...
随机推荐
- 第九篇 C#实现螺旋矩阵
C#语言,二维数组的用法和C++.java不同 其它两种也写了,差别不大这里不上传了 using System; namespace _NetRectangle { internal class Pr ...
- 上传图片,多图上传,预览功能,js原生无依赖
最近很好奇前端的文件上传功能,因为公司要求做一个支持图片预览的图片上传插件,所以自己搜了很多相关的插件,虽然功能很多,但有些地方不能根据公司的想法去修改,而且需要依赖jQuery或Bootstrap库 ...
- 读书笔记 effective c++ Item 30 理解内联的里里外外 (大师入场啦)
最近北京房价蹭蹭猛涨,买了房子的人心花怒放,没买的人心惊肉跳,咬牙切齿,楼主作为北漂无房一族,着实又亚历山大了一把,这些天晚上睡觉总是很难入睡,即使入睡,也是浮梦连篇,即使亚历山大,对C++的热情和追 ...
- 每天一个Linux命令 1
nl命令在Linux系统中用来计算文件中行号.nl可以将输出的文件内容自动的加上行号!其默认的结果与cat -n有点不太一样,nl可以将行号做比较多的显示设计,包括位数与是否自动补齐0等等的功能. 1 ...
- Java第一次作业
(一)学习总结 1.在java中通过Scanner类完成控制台的输入,Scanner类实现基本数据输入的方法是什么? import java.util.Scanner; System.out.prin ...
- React开发的一些注意点
react是R系技术栈中最基础同时也是最核心的一环,2年不到获取了62.5k star(截止到目前),足可见其给力程度.下面对一些react日常开发中的注意事项进行罗列.建议初学的朋友还是先过一遍这篇 ...
- 类string解析
原创作品,转载请注明来源:http://www.cnblogs.com/shrimp-can/p/5645248.html 在涉及字符串的时候,我们可以定义字符数组或指针,其实还有一个类,专门是为字符 ...
- 【iOS】7.4 定位服务->2.1.3.3 定位 - 官方框架CoreLocation 功能3:区域监听
本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...
- mongoose简单使用样例
新建文件 app.js 内容如下: var mongoose = require('mongoose') , Schema = mongoose.Schema; mongoose.connect('m ...
- 数字千分位处理,number.js,js保留两位,整数强制保留两位小数
杨龙飞 杨龙飞 杨龙飞 杨龙飞 杨龙飞 杨龙飞 官方文档:https://www.customd.com/articles/14/jquery-number-format-redux 1.千分位 $. ...