Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)(代码片段

Posted 松鼠小小

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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( ),这个函数可以将你的链接资源下载到本地,如果指定目录的话会下载到目录,否则下载为临时文件。

那就直接迭代我们第一步得到的图片链接列表,一个个全下载下来吧。

到这里,爬这个页面的小练习,就完成啦。

我的代码在这里:

 1 # coding=utf-8
 2 import urllib,urllib2
 3 import re
 4 
 5 #头信息
 6 header={\'User-Agent\':\'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:44.0) Gecko/20100101 Firefox/44.0\'}
 7 
 8 def get_img_url(page_url):#得到页面所有图片的链接
 9 
10     request=urllib2.Request(page_url,headers=header) #生成request对象
11     reference=urllib2.urlopen(request)    #获取页面对象
12     page=reference.read()            #读取页面
13 
14     regex=re.compile(r\'<img.*?class="BDE_Image" src="(.*?)".*?>\') #编译正则匹配模式字符串
15     img_url_list=re.findall(regex,page)       #匹配所有图片链接生成列表
16 
17     return img_url_list
18 
19 def download_img(url_list,img_path):  #从图片链接下载图片并存放在指定文件夹
20     for img_url in url_list:
21         urllib.urlretrieve(img_url,\'%s/%s.jpg\'%(img_path,img_url[-8:-5])) #下载图片
22     print \'done\'
23 
24 url=\'http://tieba.baidu.com/p/2166231880?see_lz=1\' #爬虫页面
25 path=\'/home/afei/picture\'  #存放路径
26 urllist=get_img_url(url)
27 download_img(urllist,path)

 wow,杉本由美真的好漂亮啊,有鼻子有眼的。

以上是关于Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)(代码片段的主要内容,如果未能解决你的问题,请参考以下文章

python练习——第1题

python练习——第4题

Leetcode练习(Python):数学类:第67题:二进制求和:给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。

Leetcode练习(Python):数学类:第67题:二进制求和:给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。

python3练习100题——028

Leetcode练习(Python):哈希表类:第138题: 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的 深拷贝。 我们用一个