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一看,我去!这都是什么跟什么啊,根本找不到图片在哪好伐?

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

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

然后我们看源代码,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')

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

参考链接:https://www.cnblogs.com/Axi8/p/5757270.html

python简易_Python简易爬虫相关推荐

  1. python挖矿_python简易版挖矿小游戏

    大家好,今天我们来说一说怎么制作一个简易版的挖矿小游戏. 先写初始设置的代码:import pygame, sys, random, time pygame.init() screen = pygam ...

  2. 爬虫就是python吗_python就是爬虫吗

    很多初学者都有这样的疑问:python就是爬虫吗?爬虫有什么干什么的?下面来说一说什么是python和爬虫. python Python是一种计算机程序设计语言.是一种面向对象的动态类型语言,最初被设 ...

  3. 优品课堂python下载_Python 网络爬虫数据采集 【优品课堂】

    资源内容: Python 网络爬虫数据采集 [优品课堂]|____9 requests HTTP编程          |____5 [录播]requests cookies 处理           ...

  4. 优品课堂python下载_Python网络爬虫数据采集【优品课堂】

    资源内容: Python网络爬虫数据采集[优品课堂]|____1.mp4|____1.mp4|____1.mp4|____1.mp4|____1Python标准库urllib应用I|____1URL解 ...

  5. 爬虫软件python功能_Python 网络爬虫程序详解

    #!/usr/bin/python #调用python from sys import argv #导入sys是导入python解释器和他环境相关的参数 from os import makedirs ...

  6. 简单的python画图代码_python opencv如何实现简易画图板 python opencv实现简易画图板代码...

    python opencv如何实现简易画图板?本篇文章小编给大家分享一下python opencv实现简易画图板代码,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 代码如下 ...

  7. python制作图形化小游戏_创意编程|Python的GUI简易界面设计测测你的反应力

    Python的GUI简易界面设计案例 测测你的反应力      作为初次接触代码编程的你,是不是觉得Python程序除了"码"就是"字"即使是有趣的程序除了烧烧 ...

  8. python爬虫语言都能干什么_python除了爬虫还可以做什么

    第86页-Python教程_Python图文教程-php中文网  https://www.php.cn/python-tutorials.html?p=86vPython是一种计算机程序设计语言.是一 ...

  9. [转载] python实现一个简易的计算器

    参考链接: 使用Python创建一个简单的计算器 python实现一个简易的计算器 from tkinter import from tkinter.ttk import * def my_frame ...

最新文章

  1. 2d的公式_钢筋下料计算公式分享,助你提高施工效率!
  2. 外包网络推广公司浅析网站如何通过修改网站标题来提升排名?
  3. Spring松耦合的实现
  4. WinForm编程数据视图之DataGridView浅析
  5. C#验证 中国 身份证 代码
  6. 【git】强制覆盖本地代码(与git远程仓库保持一致)
  7. Mac 解决 command not found: mysql
  8. shell echo 彩色字体
  9. 百度谷歌2013年母亲节 赏析中文搜索引擎庆祝涂鸦
  10. 权御天下计算机音乐数字乐谱,权御天下(单音 适合电吉他)
  11. 自己动手修改VB.NET支付宝接口
  12. 拓端tecdat|python缺失值处理案例分析:泰坦尼克数据
  13. 从马克思看计算机科学,从马克思主义的角度,用科学精神来看生死观,应该说已经解决,或...
  14. js html实体编码转换,字符串js编码转换成实体html编码的方法(防范XSS攻击)
  15. linux终端设置为管理员权限,ubuntu 中的管理员权限
  16. Android之自定义一个可播放某一时间段的音乐播放器
  17. Android开发人员不得不收集的代码(不断更新)
  18. 程序员健康指南阅读笔记
  19. Unity3D 光照系统(一)
  20. 软件需求规格说明书--文档模板

热门文章

  1. Swift泛型Protocol对比C#泛型Interface
  2. 【原创】oracle的tpc-c测试及方法
  3. HDU 1492 The number of divisors(约数) about Humble Numbers
  4. 诚邀参加微软.NET俱乐部10月24日Windows 7社区发布会
  5. 几个ubuntu16.04镜像下载地址
  6. gdb调试时,Program received signal SIGPIPE, Broken pipe.
  7. 【干货】同步与互斥的失败例子
  8. 这不是商业互吹,是学习的宝藏
  9. 度量时间差和jiffies计数器
  10. 一个java类运行时从哪个方法开始_Java的应用程序是从类中的