第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-)

关于python3的urllib模块,可以看这篇博客:传送门

首先是用urlopen打开网站并且获取网页内容,通过查看网页源代码,可以很容易的发现图片的格式都是差不多的,所以用正则表达式来匹配即可。

 from urllib import request
import re def get_pic():
web = request.urlopen(r'http://tieba.baidu.com/p/2166231880')
page = web.read()
page = page.decode() regex = re.compile(r'<img.*?class="BDE_Image" src="(.*?)".*?>')
pic = re.findall(regex, page)
return pic def save(save_pic):
path = 'D:\python\project\爬虫结果'
count = 0
for pic in save_pic:
request.urlretrieve(pic, '%s/%s.jpg' % (path, count))
count += 1 pic = get_pic()
save(pic)

之后我又用BeautifulSoup模块来进行了爬图,这个方法确实简单多了。这位博主对于BeautifulSoup的介绍十分不错:传送门

 from bs4 import BeautifulSoup
from urllib import request url = 'http://tieba.baidu.com/p/2166231880'
path = 'D:\python\project\爬虫结果' page = request.urlopen(url).read()
page = page.decode() soup = BeautifulSoup(page, 'lxml')
count = 0 pic_list = soup.findAll("img", class_ = 'BDE_Image')
for pic in pic_list:
pic = pic['src'] #获取列表中的src内容
request.urlretrieve(pic, '%s/%s.jpg' % (path, count))
count += 1

引用一下该博客中的一段话:

函数原型:

findAll(tag,attributes,recursive,text,limit,keywords);

find(tag,attributes,recursive,text,keywords);

参数:

tag:标签参数tag前面我们已经看到过很多次了,你可以传一个标签的名称或者多个标签名称组成的python列表作为标签参数。

例如此代码是返回HTML文档中所有标题标签的列表:.findAll({"h1","h2","h3","h4","h5","h6"})

attributes:属性参数attributes是用一个python字典封装一个标签的若干个属性和对应的属性值。

例如此代码会返回HTML文档里红色和绿色两种颜色的span标签:.findAll("span",{"class":{"green","red"}})

recursive:递归参数recursive是一个布尔变量。你想抓取HTML文档标签结构里多少层的信息?如果recursive设为True,findAll函数就会根据你的要求去查找标签参数中的所有子标签,以及子标签的子标签。如果recursive设置为False,findAll函数就只查找文档的一级标签。findAll函数默认是支持递归查找的(recursive默认值是True),一般情况下这个参数不需要设置,除非你真正想要了解自己需要哪些信息,而且抓取速度非常重要,那时你可以设置递归参数。

text:文本参数text有点不同,它是用标签的文本内容去匹配,而不是用标签的属性。假如我们想查找前面网页中包含“the prince”内容的标

签数量,我们可以用这个代码:

nameList=bsObj.findAll(text="the prince")

print (len(nameList))

limit:范围限制参数limit,显然只用于findAll方法。find其实等价于findAll的limit等于时的情形。如果你只对网页中获取的前n项结果感兴趣,就可以设置它。但是需要注意,这个参数设置之后,获得的前几项结果按照网页上的 顺序排序的,未必是你想要的那前几项。

keyword:这个参数可以让你选择那些具有特定属性的标签。

例如:allText=bsObj.findAll(id="text"),这个代码可以让你获得所有id为text的标签的内容。

每天一个小程序—0013题(爬图片+正则表达式 or BeautifulSoup)的更多相关文章

  1. 每天一个小程序—0000题(python图像处理)

    第 0000 题: 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果 python中的pillow库是专门用于处理图像的. from PIL ...

  2. 每天一个小程序—0014题(txt 转 Excel)

    基础知识:Excel文件的后缀有xls和xlsx,前者是针对2003版本的,2007及其之后的版本是xlsx. 在python中对于这两种不同后缀的文件有不同的库来处理,对于xls用wlrd.xlwt ...

  3. Python 练习冊,每天一个小程序

    Python 练习冊,每天一个小程序 说明:     Github 原文地址: 点击打开链接 Python 练习冊.每天一个小程序.注:将 Python 换成其它语言,大多数题目也试用 不会出现诸如「 ...

  4. 【Java】一个小程序,计算它包含的代码所需的耗时

    写一个小程序,用来计算它包含的代码所需的耗时.虽然简单,测试代码是否耗时还是有点用的,不用重新写嘛~ import java.util.Date; import java.util.concurren ...

  5. c++学习笔记---04---从另一个小程序接着说

    从另一个小程序接着说 文件I/O 前边我们已经给大家简单介绍和演示过C和C++在终端I/O处理上的异同点. 现在我们接着来研究文件I/O. 编程任务:编写一个文件复制程序,功能实现将一个文件复制到另一 ...

  6. c++学习笔记---03---从一个小程序说起2

    从一个小程序说起2 要求:编写一个程序,要求用户输入一串整数和任意数目的空格,这些整数必须位于同一行中,但允许出现在该行中的任何位置.当用户按下键盘上的"Enter"键时,数据输入 ...

  7. c++学习笔记---02---从一个小程序说起

    从一个小程序说起 这一讲的主要目的是帮助大家在C语言的背景知识上与C++建立联系. 问题探索 问题:对一个整型数组求和. 要求:定义一个存储着 n 个元素的数组,要求用C语言完成这个任务. 赶紧的:大 ...

  8. 微信小程序--canvas画布实现图片的编辑

    技术:微信小程序   概述 上传图片,编辑图片大小,添加文字,改变文字颜色等 详细 代码下载:http://www.demodashi.com/demo/14789.html 概述 微信小程序--ca ...

  9. 微信小程序开发——打开另一个小程序

    微信小程序打开另一个小程序,有两种方法:1.超链接:2.点击按钮. 全局配置: 跳转到其他小程序,需要在当前小程序全局配置中配置需要跳转的小程序列表,代码如下: App.json { ... &quo ...

随机推荐

  1. Linux基础命令---设置程序优先级nice

    nice nice指令可以设置程序运行的优先级,优先级会影响到程序的调度时间.nice的范围是-20~19,其中-20级别最高,19级别最低. 此命令的适用范围:RedHat.RHEL.Ubuntu. ...

  2. case when then的用法

    用法一:等值判断,相当于switch CASE expression WHEN value1 THEN returnValue1 WHEN value2 THEN returnValue2 WHEN ...

  3. 转:[你必须知道的异步编程]——异步编程模型(APM)

    本专题概要: 引言 你知道APM吗? 你想知道如何使用异步编程模型编写代码吗? 使用委托也可以实现异步编程,你知道否? 小结 一.引言 在前面的C#基础知识系列中介绍了从C#1.0——C#4.0中一些 ...

  4. WordConuts

    import java.io.File; import java.io.FileNotFoundException; import java.util.HashMap; import java.uti ...

  5. Linux 安装 mysql 数据库

    1. 克隆虚拟机 2. 上传安装文件 1.上传文件 2.解压文件 tar -xvf 文件 3. 安装数据库 安装顺序: .debuginfo .shared .client .server 1. rp ...

  6. 安装启动kafka

    vim kafka/config/server.properties #确保唯一 broker.id=0 #允许删除主题 delete.topic.enable=true # 指定数据文件所在目录 l ...

  7. Oracle之现有表上建新表、操作符、字符函数

    #PLSQL技术培训15页PPT利用现有表创建表(百度) 说明:做新操作前要对旧表备份  具体百度 语法: create table <new_table_name> as select ...

  8. spring总结之一(spring开发步骤、bean对象的管理、bean生命周期)

    ###spring 1.概念:开源,轻量级,简化开发的企业级框架. 开源:免费,发展快. 轻量级:占内存小. 简化开发:通用的功能封装,提高程序员的开发效率.--------------------- ...

  9. django 数据库html显示

    template {% autoescape off %} {% for each in obj %} <h2>{{ each.food }}</h2> <br/> ...

  10. 创建docker镜像的私有仓库

    CentOS Linux release 7.2.1511 Docker version 17.03.1-ce 安装registry镜像 同时安装一个比较小的镜像alpine待会作测试用: # doc ...