第 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. greenplum presto impala选型与测评

    查看原文请至:https://my.oschina.net/hblt147/blog/1843028

  2. selenium-java web自动化测试工具抓取百度搜索结果实例

    selenium-java web自动化测试工具抓取百度搜索结果实例 这种方式抓百度的搜索关键字结果非常容易抓长尾关键词,根据热门关键词去抓更多内容可以用抓google,百度的这种内容容易给屏蔽,用这 ...

  3. 校正PHP服务器时间不准的问题

    关于怎样解决PHP服务器时间不准的问题,得针对不同的情况进行不同的处理. 下面是经常遇到的情况,及应对办法. 1.PHP服务器时区不对,使用下面代码修正: <?php $timezone = & ...

  4. Django MTV simple_tag filter inclusion_tag

    Django框架 模型(Model).视图(View)和控制器(Controller),具有耦合性低.重用性高.生命周期成本低等优点. MVC 框架 --  Model -View -Controll ...

  5. Porsche Piwis Tester 2 Online Coding Guide

    Porsche Piwis online programming account service is piwis porsche subscription and piwis tester 2 on ...

  6. animate和translate

    transition, transform, tanslate,animation分别为过渡,变换,平移.动画.transform的属性包括:rotate() / skew() / scale() / ...

  7. ucos ii 46个系统API函数解析

    源: ucos ii 46个系统API函数解析

  8. to refactor for refactor

    v1.1 if all algorithm are in one function, it will expand. so each operate type should be separated. ...

  9. Spring AOP(基于代理类的AOP实现)

    #基于代理类的AOP实现:step1: 1 package com.sjl.factorybean; /**切面类*/ import org.aopalliance.intercept.MethodI ...

  10. direct加载之ora-39782一例

    近日,我们有个环境在数据加载到oracle的时候出现ora-39782异常,版本是11.2.经google,几乎没有什么先例,因为我们是使用oci直接写的,可见现在还使用oci接口并不多,也或者我们的 ...