第 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. Hive中变量的使用

    1.Hive配置属性 (1)命令行方式 Hive配置属性存储于 hiveconf 命名空间中,该命名空间中的属性是可读写的.在查询语句中插入 '${hiveconf:变量名}',就可以通过 hive ...

  2. Hive分区表新增字段及修改表名,列名,列注释,表注释,增加列,调整列顺序,属性名等操作

    一.Hive分区表新增字段 参考博客:https://blog.csdn.net/yeweiouyang/article/details/44851459 二.Hive修改表名,列名,列注释,表注释, ...

  3. 限制访问次数例子和Ajax的some

    -- 限制访问次数作业解答 -- -- urls.py 里-- from django.conf.urls import url from django.contrib import admin fr ...

  4. python 关键字yield解析

    python 关键字yield解析 yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator.y ...

  5. Kattis之旅——Divisible Subsequences

    Given a sequence of positive integers, count all contiguous subsequences (sometimes called substring ...

  6. asyncio queue

    from asyncio import Queue,sleep import asyncio from threading import Thread import time qu=Queue() # ...

  7. 一键PHP/JAVA安装工具

    OneinStack是一键PHP/JAVA安装脚本工具,包含lnmp,lamp,lnmpa,ltmp,lnmh,MySQL,PostgreSQL,MongoDB等 建议使用 PHP7.1+MYSQL5 ...

  8. P4219 [BJOI2014]大融合(LCT)

    P4219 [BJOI2014]大融合 对于每个询问$(u,v)$所求的是 ($u$的虚边子树大小+1)*($v$的虚边子树大小+1) 于是我们再开个$si[i]$数组表示$i$的虚边子树大小,维护一 ...

  9. k8s device plugin

    基本概念入门: Device Manager Proposal Device plugin offical Doc(中文) device-plugins offical Doc(En) Go thro ...

  10. MobaXterm setting autocomplete

    autocomplete-server-names-for-ssh-and-scp mkdir /etc/bash_completion.d cat >> /etc/bash_comple ...