本文是Python 爬虫的一个小demo,通过这个demo ,我们可以对爬虫的一些概念和基本流程有一个大概了解。
这道题是一道爬虫练习题,需要爬链接http://tieba.baidu.com/p/2166231880里的所有妹子图片,点进链接看一下,这位妹子是日本著名性感女演员——杉本由美,^_^好漂亮啊,赶紧开始爬吧。
以下就是我的爬虫步骤:
爬取图片链接
虽然request
和beautifulsoup
模块方便又好用,但是我还是决定使用传统的urllib
和urllib2
模块,毕竟对这两个模块熟悉之后,就能基本明白爬虫的原理和实现啦。
首先是导入模块,除了前面提到的两个模块,我们还要导入re
模块,使用正则表达式来匹配我们想要的内容。
导入模块之后,就可以获取页面了。步骤如下:
使用
urllib2.Requst( )
得到request
对象。这个对象是用于打开一个网页的请求,可以方便的携带一些请求需要的信息,如
headers
,cookie
等数据。因为我们打开的网页——百度贴吧不需要登录就可以浏览页面,所以
request
对象只需要headers
对象就可以了。使用
urllib2.urlopen( )
得到response
对象。这个对象是爬虫页面的对象,与文件对象类似,你可以使用
read( )
来得到response
页面对象的源码。使用正则匹配要爬的资源链接
不会正则的同学,可以学一下,很快,一个下午就能学会正则基础啦,至少爬虫使用的正则你就会写啦。我们想要得到页面的所有图片的链接,那就在浏览器中使用
CTRL+ALT+c
来打开页面查看页面的源码,也就是页面的HTML
文本。找一下图片的标签在哪里,发现所有要下载的图片标签
<img>
的类都是BDE_image
,标签格式都一样,但是帖子中还有广告楼层里面的图片标签也是也是这个类。我可不想下载下来之后浏览美女图片,突然跳出来一个广告图片。那再仔细看一下页面,发现只要点击只看楼主选项,广告楼层就不见了,同时页面url后面多了几个字符是
?see_lz=1
。好,那我们直接在我们的请求url后加上这几个字符就行啦,至于其他的楼层,没有了更好^_^,反正其他楼层都是灌水。ok,那就开始匹配我们想要的链接吧。使用
re.compile( )
来编译匹配模式,再使用re.findall( )
得到所有的图片的src属性,也就是链接的列表。这就完成了我们爬虫最重要的一步啦。
下载图片到本机
下载链接要使用urllib.urlretrieve( )
,这个函数可以将你的链接资源下载到本地,如果指定目录的话会下载到目录,否则下载为临时文件。
那就直接迭代我们第一步得到的图片链接列表,一个个全下载下来吧。
到这里,爬这个页面的小练习,就完成啦。
我的代码在这里:
1 | # coding=utf-8 |
wow,杉本由美真的好漂亮啊,有鼻子有眼的。