Hi, I'm back.

 
寒假在家只有一台笔记本,也懒得把台式机上的键盘拆下来用,因此编程被我暂时搁置,转而在网易云课堂上学了一下Python。可惜的是云课堂的Python教程是基于Python2.x,而且更加悲剧的是我在网上买的《Python核心编程》也是基于Python2.x的。而我本着学新不学旧的原则,脑子一抽安装了Python3.4,导致我学着编写示例代码的时候总是小心翼翼生怕踩到雷区。不过私以为学2.x写3.x等于是把两个版本都学了一下,还是有点好处的。
 
回到学校之后学着视频里写了一个小脚本,功能很简单,就是下载贴吧图片帖内所有的图片到指定的文件夹。先上代码:
import re
import urllib.request # ------ 获取网页源代码的方法 ---
def getHtml(url):
page = urllib.request.urlopen(url)
html = page.read()
return html # ------ getHtml()内输入任意帖子的URL ------
html = getHtml("http://tieba.baidu.com/p/3205263090")
# ------ 修改html对象内的字符编码为UTF-8 ------
html = html.decode('UTF-8') # ------ 获取帖子内所有图片地址的方法 ------
def getImg(html):
# ------ 利用正则表达式匹配网页内容找到图片地址 ------
reg = r'src="([.*\S]*\.jpg)" pic_ext="jpeg"'
imgre = re.compile(reg);
imglist = re.findall(imgre, html)
return imglist imgList = getImg(html)
imgName = 0
for imgPath in imgList:
# ------ 这里最好使用异常处理及多线程编程方式 ------
f = open("pic/"+str(imgName)+".jpg", 'wb')
f.write((urllib.request.urlopen(imgPath)).read())
f.close()
imgName += 1 print("All Done!")
先总结一下在编写过程中被“坑”的地方(Python:怪我咯?)
1.urllib在Python3.x中发生了改变,按照这份脚本来说,原本在urllib下的urlopen()方法现在在urllib.request下。
2.必须修改html对象内的字符编码,因为获取的字符都是以字节形式保存在对象中(因此图片可以直接通过read()方法保存在文件中)。
3.正则表达式修改了好几次,这个下面说。
4.Python中没有i++这种写法,所以"pic/"+str(++imgName)+".jpg"没有效果。
 
(以下为废话,如果你是百度这份代码直接使用的话下面的内容可以忽略)
说一下和正则表达式“斗智斗勇”的过程。
贴吧中图片标签内是这么写的
<img class="..." src="..." pic_ext="jpeg" ...>

一开始我的想法很简单,正则表达式如下

reg = r'src="(.*\.jpg)" pic="jpeg"'

因为“.”这个元操作符会匹配换行符外所有字符,因此当爬到格式为png或者gif的图片的时候也会匹配,差不多就是下面这种效果:

[..., 'http://.....png" ....... <src="...jpg"']
简单来说就是会从无关图片的“src”一直匹配到我需要下载的图片的末尾“pic="jpeg"”
解决的办法就是匹配到空格的时候就忽略,所以要将“.”和“\S”放在同一个字符类中,要么匹配除了空白符之外的所有字符,要么忽略。
 
小彩蛋时间,这是我下载到的所有图片(逃

利用python3.x实现小爬虫下载贴吧内图片的更多相关文章

  1. python学习笔记(12)--爬虫下载煎蛋网图片

    说明: 1. 这个其实是在下载漫画之前写的,比那个稍微简单点,之前忘放到博客备份了. 2. 不想说啥了,总结放到漫画那个里面吧! import urllib.request import re imp ...

  2. py3+urllib+re,爬虫下载捧腹网图片

    实现原理及思路请参考我的另外几篇爬虫实践博客 py3+urllib+bs4+反爬,20+行代码教你爬取豆瓣妹子图:http://www.cnblogs.com/UncleYong/p/6892688. ...

  3. python小爬虫练手

    一个人无聊,写了个小爬虫爬取不可描述图片.... 代码太短,就暂时先往这里贴一下做备份吧. 注:这是很严肃的技术研究,当然爬下来的图片我会带着批判性的眼光审查一遍的....   :) #! /usr/ ...

  4. python3爬虫——下载unsplash美图到本地

    最近发现一个网站www.unsplash.com ( 没有广告费哈,纯粹觉得不错 ),网页做得很美观,上面也都是一些免费的摄影照片,觉得很好看,就决定利用蹩脚的技能写个爬虫下载图片. 先随意感受一下这 ...

  5. 利用Python编写网络爬虫下载文章

    #coding: utf-8 #title..href... str0='blabla<a title="<论电影的七个元素>——关于我对电影的一些看法以及<后会无期 ...

  6. 「拉勾网」薪资调查的小爬虫,并将抓取结果保存到excel中

    学习Python也有一段时间了,各种理论知识大体上也算略知一二了,今天就进入实战演练:通过Python来编写一个拉勾网薪资调查的小爬虫. 第一步:分析网站的请求过程 我们在查看拉勾网上的招聘信息的时候 ...

  7. 今天来做一个PHP电影小爬虫。

    今天来做一个PHP电影小爬虫.我们来利用simple_html_dom的采集数据实例,这是一个PHP的库,上手很容易.simple_html_dom 可以很好的帮助我们利用php解析html文档.通过 ...

  8. Python爬虫下载Bilibili番剧弹幕

    本文绍如何利用python爬虫下载bilibili番剧弹幕. 准备: python3环境 需要安装BeautifulSoup,selenium包 phantomjs 原理: 通过aid下载bilibi ...

  9. Python之小测试:用正则表达式写一个小爬虫用于保存贴吧里的所有图片

    很简单的两步: 1.获取网页源代码 2.利用正则表达式提取出图片地址 3.下载 #!/usr/bin/python #coding=utf8 import re # 正则表达式 import urll ...

随机推荐

  1. JVM类加载器工作流程

    类加载器 classloader:谈到类加载,不得不提的就是负责此项工作的类加载器classloader,classloader的职责是将Java源文件编译后的字节码文件加载到内存中去执行. 类加载至 ...

  2. TensorFlow学习笔记(五)图像数据处理

    目录: 一.TFRecord输入数据格式 1.1 TFrecord格式介绍 1.2 TFRecord样例程序 二.图像数据处理 2.1TensorFlow图像处理函数 2.2图像预处理完整样例 三.多 ...

  3. Code signing is required for product type 'Application' in SDK 'iOS 11.2'

    在打包的时候出现这样一个错误,Code signing is required for product type 'Application' in SDK 'iOS 11.2'  ,就是说代码签名证书 ...

  4. PKU 1035 Spell checker(Vector+String应用)

    题目大意:原题链接 1输入一个字符串,如果字典中存在该字符串,直接输出,否则; 2.删除,替换,或插入一个字母.如果使得输入字符串==字典中已经有的单词,输出该单词,否则. 3.直接输入下一个字符串, ...

  5. 5-es6的模块化开发与其它的不同

    1.加载机制不同es是静态加载,其它是动态加载.Es6 模块的设计思想,是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量.CommonJS 和 AMD.CMD 模块,都只能在运行 ...

  6. 好用的http client库CPP REST SDK

    前言 C++中http client库本身就少,好用的就更少了,在了解微软开源的CPP REST SDK库之前,我知道的C++ http client库有libcurl(这个是C语言的),Qt的QNe ...

  7. 关于MVC 上传文件

    前台代码如下 @{ Layout = null; } <!DOCTYPE html> <html> <head> <title>Index</ti ...

  8. 20145301Java课程总结

    20145301 Java课程总结 每周读书笔记链接汇总 第一周读书笔记: http://www.cnblogs.com/5301z/p/5248888.html 第二周读书笔记: http://ww ...

  9. 《Java程序设计》实验2实验报告

    20145318 <Java程序设计>实验2 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 ...

  10. 20145335郝昊《java程序设计》第1次实验报告

    2014535郝昊<java程序设计>实验1实验报告 实验名称 利用java语言实现凯撒密码,并运行测试. 实验内容 用java语言实现凯撒密码,凯撒密码是一种代替的移位密码,它将明文加密 ...