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. 使用Django和Python创建Json response

    版权声明:本文为博主原创文章,欢迎转载. https://blog.csdn.net/fengyu09/article/details/30785101 使用jquery的.post提交,并期望得到多 ...

  2. c#中params关键字应用

    c#params应用 params 是C#开发语言中关键字, params主要的用处是在给函数传参数的时候用,就是当函数的参数不固定的时候. 在方法声明中的 params 关键字之后不允许任何其他参数 ...

  3. java-mybaits-00503-延迟加载

    1.什么是延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 需求: ...

  4. jquery插件开发快速入门

    1.添加jQuery对象方法添加jQuery对象方法:jQuery.prototype.myMethod. 在jQuery源码中有一句:jQuery.fn = jQuery.prototype,也就是 ...

  5. python学习笔记(十五)异常处理

    python解析器去执行程序,检测到了一个错误时,触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行,所以你必须提供一种异常处理机制来增强你程序的健壮性与容错性 . 例 ...

  6. 检查Linux服务器性能命令详解

    如果你的Linux服务器突然负载暴增,如何在最短时间内找出Linux性能问题所在? 通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解. uptime dmesg | tail vmst ...

  7. python logging模块介绍

    1.日志级别 日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICAL. DEBUG:详细的信息,通常只出现在诊断问题上 INFO:确认一切按预期运行 ...

  8. mysql数据库从删库到跑路之mysql完整性约束

    一 介绍 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性主要分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN KEY ...

  9. BigInteger和Complex:NET 4新增数据类型

    BigInteger和Complex是.NET 4中新增的两种值类型,他们位于System.Numeric命名空间下,需要单独添加引用. BigInteger BigInteger类型是不可变类型,代 ...

  10. Java并发编程之CountDownLatch的用法

    一.含义 CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能.CountDownLatch是一个同步的辅助类,它可以允许一个或多个线程等待, ...