这道题是一道爬虫练习题,需要爬链接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)的更多相关文章

  1. Python+Flask+Gunicorn 项目实战(一) 从零开始,写一个Markdown解析器 —— 初体验

    (一)前言 在开始学习之前,你需要确保你对Python, JavaScript, HTML, Markdown语法有非常基础的了解.项目的源码你可以在 https://github.com/zhu-y ...

  2. Python写一个自动点餐程序

    Python写一个自动点餐程序 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘记,或者是在地铁/公交上没办法点餐,所以总是没饭吃,只有 ...

  3. [python] 1、python鼠标点击、移动事件应用——写一个自动下载百度音乐的程序

    1.问题描述: 最近百度总爱做一些破坏用户信任度的事——文库金币变券.网盘限速,吓得我赶紧想办法把存在百度云音乐中的歌曲下载到本地. http://yinyueyun.baidu.com/ 可问题是云 ...

  4. 用 python 写一个年会抽奖小程序

    使用 pyinstaller 打包工具常用参数指南 pyinstaller -F demo.py 参数 含义 -F 指定打包后只生成一个exe格式的文件 -D –onedir 创建一个目录,包含exe ...

  5. Python 网络爬虫 009 (编程) 通过正则表达式来获取一个网页中的所有的URL链接,并下载这些URL链接的源代码

    通过 正则表达式 来获取一个网页中的所有的 URL链接,并下载这些 URL链接 的源代码 使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 ...

  6. python学习(10)字典学习,写一个三级菜单程序

    学习了字典的应用.按老师的要求写一个三级菜单程序. 三级菜单程序需求如下: 1.深圳市的区--街道--社区---小区4级 2.建立一个字典,把各级区域都装进字典里 3.用户可以从1级进入2级再进入3级 ...

  7. python学习(5)写一个二分算法的程序

    把之前学习的做一个小结.之前看二分查找法,只能是似而非地看懂大概.现在用这么多天的知识积累已经可以自己写了. 而且在算法书的基础上,把需要找的数字做一个人机互动操作. 另外,初步接触到了 __name ...

  8. 如何用 Python 写一个简易的抽奖程序

    不知道有多少人是被这个头图骗进来的:) 事情的起因是这样的,上周有同学问小编,看着小编的示例代码敲代码,感觉自己也会写了,如果不看的话,七七八八可能也写的出来,但是一旦自己独立写一段程序,感觉到无从下 ...

  9. python练习册 每天一个小程序 第0013题

    # -*-coding:utf-8-*- ''' 题目描述: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-) 地址: http://tieba.baidu.com/p/21 ...

随机推荐

  1. intellij idea 常用快捷键mac版

    login.jsp文件中的html标签都是大写格式的,看着很不舒服,就改了一下,全部用的快捷键修改成小写的,也因此整理了一下常用的快捷键. shift + Command + u 大小写转换. alt ...

  2. C#自动弹出窗口并定时自动关闭

    最近做个小项目,用到一个小功能:后台线程定时查询数据库,不符合条件的记录弹出消息提醒(在窗口最前面),并且过几秒钟再自动关闭弹出的窗口. 所以从网上找来资料,如下: WinForm 下实现一个自动关闭 ...

  3. mfc---CFileDialog的过滤器

    CFileDialog的过滤器每种类型由两部分组成“tda|*.tda”,两种类型之间用“|”隔开

  4. python打印表格式数据,留出正确的空格和段落星号或注释

    python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITE ...

  5. Visual Studio 2017正式版离线安装及介绍

    Visual Studio 2017 RTM正式版离线安装及介绍. 首先至官网下载:https://www.visualstudio.com/zh-hans/downloads/ VS 2017 正式 ...

  6. APICloud使用

    APICloud-APP开发平台 [网址:]http://www.apicloud.com/ APICloud studio 下载 打开网址,找到开发者社区->文档->下载->开发工 ...

  7. .NET 发布网站步骤

    本文章分为三个部分: web网站发布.IIS6 安装方法.ASP.NET v4.0 安装方法 一.web网站发布 1.打开 Visual Studio 2013 编译环境 2.在其解决方案上右击弹出重 ...

  8. Pow(x, n) leetcode

    Implement pow(x, n). Subscribe to see which companies asked this question 利用依次消去二进制位上的1,来进行计算 double ...

  9. strtok、strtok_s、strtok_r 字符串分割函数

    1.strtok函数 函数原型:char * strtok (char *str, const char * delimiters); 参数:str,待分割的字符串(c-string):delimit ...

  10. node c++多线程插件 第一天 c++线程相关函数

    因为不会c++,今天主要是学习了一下c++的东西,感觉非常麻烦. 目前知道了c++里创建线程createThread,返回一个内核对象(HANDLE),我的理解是,c++中系统层面上的操作(线程,文件 ...