初识爬虫,实战小案例——贴吧图片的爬取

请添加图片描述


在对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 = r’src=“(.+?\.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 = r'src="(.+?\\.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 = r'src="(.+?\\.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

啪啪啪啪啪

第一步完成~


三、指定链接抓取

我想要抓另一个帖子,总不能打开源代码,然后把那段地址改了在运行吧。

只是一个小程序,那也不行欸,加一个让用户指定地址的交互。

先把提取图片的那段代码打包下:

1 def get\_image(html\_code):
2     reg = r'src="(.+?\\.jpg)" width'
3     reg\_img = re.compile(reg)
4     img\_list = reg\_img.findall(html\_code)
5     x = 0
6     for img in img\_list:
7         urllib.urlretrieve(img, '%s.jpg' % x)
8         x += 1

最后来个请输入:

1 print u'请输入url:',
2 url = raw\_input()
3 if url:
4     pass
5 else:
6     url = 'http://tieba.baidu.com/p/1753935195'
7 html\_code = get\_html(url)
8 get\_image(html\_code)

运行一下,试试另一个帖子:

完美~~


四、交互的添加

虽然写的是一个简单的小程序,但有强迫症的我还是给他加上了交互(不然多难受啊:双击,屏幕一闪,下载完了。。。)

最后的代码

 1 # coding:utf-8
 2 import urllib 3 import re 4 
 5 def get\_html(url): 6     page = urllib.urlopen(url) 7     html\_code = page.read() 8     return html\_code 9 
10 def get\_image(html\_code):
11     reg = r'src="(.+?\\.jpg)" width'
12     reg\_img = re.compile(reg)
13     img\_list = reg\_img.findall(html\_code)
14     x = 0
15     for img in img\_list:
16         urllib.urlretrieve(img, '%s.jpg' % x)
17         x += 1
18 
19 print u'\-------网页图片抓取-------'
20 print u'请输入url:',
21 url = raw\_input()
22 if url:
23     pass
24 else:
25     print u'\---没有地址输入正在使用默认地址---'
26     url = 'http://tieba.baidu.com/p/1753935195'
27 print u'\----------正在获取网页---------'
28 html\_code = get\_html(url)
29 print u'\----------正在下载图片---------'
30 get\_image(html\_code)
31 print u'\-----------下载成功-----------'
32 raw\_input('Press Enter to exit')

相对来说比较舒服的交互体验,大功告成~

最后,这里免费分享给大家一套免费的学习资料,包含视频、源码/电子书,希望能帮到那些不满现状,想提升自己却又没有方向的朋友,也可以加我微信一起来学习交流。
Python方向的学习路线图,清楚各个方向要学什么东西

100多节Python课程视频,涵盖必备基础、爬虫和数据分析

100多个Python实战案例,学习不再是只会理论

Python漫画教程,手机也能学习
请添加图片描述

请添加图片描述

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

请添加图片描述

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

**学习资源已打包,需要的小伙伴可以戳这里【学习资源】

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值