贴吧图片的爬取


一、页面获取

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

由于Python3里的urllib模块已经发生改变,所以要注意此处应该写为import urllib.request,而不是import urllib。

代码如下:

# coding:utf-8
import urllib.requestpage = urllib.request.urlopen('http://tieba.baidu.com/p/1753935195') # 打开网页
htmlcode = page.read() # 读取页面源码
htmlcode = htmlcode.decode('utf-8')
print (htmlcode) # 在控制台输出

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

运行结果与查看源码其实差不多
运行结果就不放上来了
也可以写到文本文档中:

#coding:utf-8
import urllib.requestpage = urllib.request.urlopen('http://tieba.baidu.com/p/1753935195')
htmlcode = page.read()
htmlcode = htmlcode.decode('utf-8')
# print htmlcodepageFile = open('pageCode.txt','w') # 以写的方式打开pageCode.txt
pageFile.write(htmlcode) # 写入
pageFile.close() # 开了记得关

运行一遍,pageCode.txt就出现在了你的同级目录下

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

def get_html(url):page = urllib.request.urlopen(url)html = page.read()return html

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


二、图片(目标)的提取

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

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

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

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

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

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

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

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

# coding:utf-8
import urllib.request
import redef get_html(url):page = urllib.request.urlopen(url)html = page.read().decode('utf-8')return htmlreg = r'src="(.+?\.jpg)" width'#正则表达式
reg_img = re.compile(reg)#编译一下,运行更快
imglist = reg_img.findall(get_html('http://tieba.baidu.com/p/1753935195'))#进行匹配
for img in imglist:print (img)

打印出这么多图片链接

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

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

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

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

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

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

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

调整下代码:

# coding:utf-8
import urllib.request
import redef get_html(url):page = urllib.request.urlopen(url)html = page.read().decode('utf-8')return htmlreg = r'src="(.+?\.jpg)" width'
reg_img = re.compile(reg)
imglist = reg_img.findall(get_html('http://tieba.baidu.com/p/1753935195'))
x = 0
for img in imglist:urllib.request.urlretrieve(img, '%s.jpg' %x)x += 1

啪啪啪啪啪

第一步完成~


三、指定链接抓取

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

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

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

def get_image(html_code):reg = r'src="(.+?\.jpg)" width'reg_img = re.compile(reg)img_list = reg_img.findall(html_code)x = 0for img in img_list:urllib.request.urlretrieve(img, '%s.jpg' % x)x += 1

最后来个请输入:

print u'请输入url:',
url = raw_input()
if url:pass
else:url = 'http://tieba.baidu.com/p/1753935195'
html_code = get_html(url)
get_image(html_code)

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

完美~~


四、交互的添加

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

最后的代码:

# coding:utf-8
import urllib.request
import refrom pip._vendor.distlib.compat import raw_inputdef get_html(url):page = urllib.request.urlopen(url)html_code = page.read()html_code = html_code.decode('utf-8')return html_codedef get_image(html_code):reg = r'src="(.+?\.jpg)" width'reg_img = re.compile(reg)img_list = reg_img.findall(html_code)x = 0for img in img_list:urllib.request.urlretrieve(img, '%s.jpg' % x)x += 1print (u'-------网页图片抓取-------')
print (u'请输入url:')
url = raw_input()
if url:pass
else:print (u'---没有地址输入正在使用默认地址---')url = 'http://tieba.baidu.com/p/1753935195'
print (u'----------正在获取网页---------')
html_code = get_html(url)
print (u'----------正在下载图片---------')
get_image(html_code)
print (u'-----------下载成功-----------')
raw_input('Press Enter to exit')

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

Python爬虫——第一个小爬虫(经典)修改版相关推荐

  1. 如何用python做考勤_【python爬虫教程 考勤】如何用Python实现一只小爬虫,爬取拉勾网...

    python爬虫入门教程全集 千锋官网上有一些是零基础入门学习的很不错 如何用Python实现一只小爬虫,爬取拉勾网 1.首先打开拉,并搜索"java",显示出职位信息就是我们的目 ...

  2. python给pip修改镜像-cmd命令修改版

    python给pip修改镜像-cmd命令修改版 本来是想用创建pip.ini的.但没有成功,于是通过命令来设置,成功了 1.查看pip的默认源 之后想修改回默认源要用 在命令行输入 pip help ...

  3. 第一个python爬虫_Python爬虫01——第一个小爬虫

    Python小爬虫--贴吧图片的爬取 在对Python有了一定的基础学习后,进行贴吧图片抓取小程序的编写. 目标: 首先肯定要实现图片抓取这个基本功能 然后实现对用户所给的链接进行抓取 最后要有一定的 ...

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

    原文:https://www.cnblogs.com/Axi8/p/5757270.html Python小爬虫--贴吧图片的爬取 在对Python有了一定的基础学习后,进行贴吧图片抓取小程序的编写. ...

  5. Python日记——柿子要捡软的捏,记第一只小爬虫

    2017.12.19 阅读了<零基础入门学习Python>一书第14章"论一只爬虫的自我修养"之后总想跃跃欲试实现一只自己的小爬虫,但可惜的是,或许因为这本书的读者太多 ...

  6. 数据挖掘 (三)——基于python的当当网小爬虫

    导语 本文将实现利用Python爬取并简单地可视化分析当当网的图书数据. 详细的exe.源代码.程序解析等文件请关注公众号 行歌 知否, 回复关键词 当当网小爬虫 获取. 更多精彩内容请关注公众号 转 ...

  7. python将txt转为字符串_python做第一只小爬虫

    "受尽苦难而不厌,此乃修罗之路" 本文技术含量过低,请谨慎观看 之前用R语言的Rcurl包做过爬虫,给自己的第一感觉是比较费劲,看着看着发际线就愈加亮眼,最后果断丢之.不过好的是和 ...

  8. python 人生的第一个小爬虫 爬小说 保存一下

    # -*- coding:UTF-8 -*- from urllib import request from bs4 import BeautifulSoup import chardet impor ...

  9. 爬虫学习实践(1)——我的第一个小爬虫

    文章目录 应用流程 一个简单爬虫实例 获取 提取 储存 最近由于竞赛需要,准备自学一下爬虫,以备不时之需,参考书籍是唐松的<Python网络爬虫从入门到实践>,上面的代码也大多来源于书上, ...

最新文章

  1. 如何在elasticsearch里面使用深度分页功能
  2. 更新版-梳理前端开发使用eslint和prettier来检查和格式化代码问题
  3. Android动态加载进阶 代理Activity模式
  4. python画图零基础入门教程_Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 6. 条件...
  5. 【转】正确认识动脉压力波形
  6. java正则效率_善用Pattern提高你的应用处理正则表达式的效率(Java)
  7. javascript-演练-二级联动下拉框
  8. java 0x5_java - 从Java中的COM端口读取,错误0x5在.. \ rxtx \ src \ termios.c(892) - 堆栈内存溢出...
  9. 【计算机组成原理】定点乘法运算之原码两位乘法
  10. url,href,src区别
  11. 5、WPF实现简单计算器-非常适合初学者练习
  12. 飞凌课堂丨揭开影响RS485通讯因素的面纱
  13. VS生成的C++项目常用目录设置
  14. vue处理PDF文档流数据并实现PDF的预览以及打印功能以及处理PDF打印乱码问题
  15. 有趣的java编程题_java编程题 有趣的数
  16. 小程序input自动聚焦拉起键盘
  17. 根据心电信号计算心率的matlab代码
  18. vc设备工程师_设备工程师考核.doc
  19. NOI2016酱油记
  20. 5、CYC-GPS接收机

热门文章

  1. 如何打印CSDN博客?将CSDN博客内容保存为PDF然后下载
  2. matlab矩阵逆时针旋转90度_MATLAB矩阵的翻转求逆旋转转置
  3. python打包windows服务 开机自启动守护进程
  4. 微信小程序 一键已读功能实现
  5. C++ setw() 与 setfill()
  6. Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能[转]
  7. C语言基础篇 (二十五) 详解C语言第一大功臣:函数
  8. 什么是 Shell ?(超详细)
  9. 可以用php做出一个圆锥吗,CST MWS如何将模型共形到一个圆锥曲面上
  10. ASLR和PIE的区别和作用