码迷,mamicode.com
首页 > 编程语言 > 详细

Python爬虫——第一个小爬虫01

时间:2016-08-10 18:58:10      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:

Python小爬虫——贴吧图片的爬取

在对Python有了一定的基础学习后,进行贴吧图片抓取小程序的编写。


 

  目标:  

  • 首先肯定要实现图片抓取这个基本功能
  • 然后要有一定的交互,程序不能太傻吧
  • 最后实现对用户所给的链接进行抓取

一、页面获取

要让python可以进行对网页的访问,那肯定要用到urllib之类的包。So先来个 import urllib 

urllib中有 urllib.urlopen(str) 方法用于打开网页并返回一个对象,调用这个对象的read()方法后能直接获得网页的源代码,内容与浏览器右键查看源码的内容一样。

1 #coding:utf-8
2 import urllib
3 
4 page = urllib.urlopen(http://tieba.baidu.com/p/1753935195)#打开网页
5 htmlcode = page.read()#读取页面源码
6 print htmlcode#在控制台输出

运行结果与查看源码其实差不多

运行结果就不放上来了

也可以写到文本文档中:

 1 #coding:utf-8
 2 import urllib
 3 
 4 page = urllib.urlopen(http://tieba.baidu.com/p/1753935195)
 5 htmlcode = page.read()
 6 #print htmlcode
 7 
 8 pageFile = open(pageCode.txt,w)#以写的方式打开pageCode.txt
 9 pageFile.write(htmlcode)#写入
10 pageFile.close()#开了记得关

运行一遍,txt就出现在了getJpg.py技术分享的目录下

好了别闹,我们把它封装成方法:

1 def get_html(url):
2     page = urllib.urlopen(url)
3     html = page.read()
4     return html

然后我们的页面获取代码就K.O.


 

二、图片(目标)的提取

做完上面步骤,你打开txt一看,我去!这都是什么跟什么啊,根本找不到图片在哪好伐?

客官别急啊,我这就去给你叫我们的小。。。图片!图片!

首先我们要一个正则表达式 (什么你不会?请看菜鸟入门教程-->Go)

然后我们看源代码,Yeah 我们找到了其中一张图片是这样的

技术分享

写出图片的正则表达式: reg = rsrc="(.+?\.jpg)" width 

解释下吧——匹配以src="开头然后接一个或多个任意字符(非贪婪),以.jpg" width结尾的字符串。比如图中红框内src后 双引号里的链接就是一个匹配的字符串。

接着我们要做的就是从get_html方法返回的辣么长一串字符串中 拿到 满足正则表达式的 字符串

用到python中的re库中的 re.findall(str) 它返回一个满足匹配的字符串组成的列表

 1 # coding:utf-8
 2 import urllib
 3 import re
 4 
 5 def get_html(url):
 6     page = urllib.urlopen(url)
 7     html = page.read()
 8     return html
 9 
10 reg = rsrc="(.+?\.jpg)" width#正则表达式
11 reg_img = re.compile(reg)#编译一下,运行更快
12 imglist = reg_img.findall(get_html(http://tieba.baidu.com/p/1753935195))#进行匹配
13 for img in imglist:
14     print img

打印出这么多图片链接

技术分享

光把链接拿出来没用啊,我们的目标是下载下来~

urllib库中有一个 urllib.urlretrieve(链接,名字) 方法,它的作用是以第二个参数为名字下载链接中的内容,我们来试用一下

在上面代码循环中加上 urllib.urlretrieve(img, tieba.jpg) 

技术分享

卧槽!!!怎么只下了一张

至少它下载了不是?啪啪啪啪啪(掌声)

检查下问题出在哪。。。。

没错我们只给了一个tieba.jpg的名字,后来的把前面的覆盖了。

调整下代码:

 1 # coding:utf-8
 2 import urllib
 3 import re
 4 
 5 def get_html(url):
 6     page = urllib.urlopen(url)
 7     html = page.read()
 8     return html
 9 
10 reg = rsrc="(.+?\.jpg)" width
11 reg_img = re.compile(reg)
12 imglist = reg_img.findall(get_html(http://tieba.baidu.com/p/1753935195))
13 x = 0
14 for img in imglist:
15     urllib.urlretrieve(img, %s.jpg %x)
16     x += 1

啪啪啪啪啪

技术分享

 第一步完成~


 

Python爬虫——第一个小爬虫01

标签:

原文地址:http://www.cnblogs.com/Axi8/p/5757270.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!