【python小练】0013
第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-)
科科。。。妹子就算了,大晚上的爬点吃的吧。食物图集:抿一口,舔一舔,扭一扭~·SCD
写个简单的爬图爬虫方法还蛮多的。
这次尝试用urlib.request来实现。
读取图片网源码,利用re.compile找到其中符合要求的img标签生成图片list,最后用request.urlretrieve下载图片到本地。
Code:
import os
import re
import urllib.request def pic_collector(url):
content = urllib.request.urlopen(url).read()
r = re.compile('<img class="BDE_Image" pic_type="1" width="450" height="450" src="(.*?)" ')
pic_list = r.findall(content.decode('utf-8')) os.mkdir('pic_collection')
os.chdir(os.path.join(os.getcwd(), 'pic_collection'))
for i in range(len(pic_list)):
pic_num = str(i) + '.jpg'
urllib.request.urlretrieve(pic_list[i], pic_num)
print("success!" + pic_list[i]) pic_collector("http://tieba.baidu.com/p/4341640851")
Note:
1. re.compile()内容由网页源代码决定。比如我扒的这个网页,用chrome查看源代码,找到想下载的包含图片的<img>标签,其完整内容如下(以某一张图为例):
<img class="BDE_Image" pic_type="" width="" height="" src="http://imgsrc.baidu.com/forum/w%3D580/sign=a6080fca870a19d8cb03840d03fb82c9/2683ea039245d688be88e4dfa3c27d1ed31b2445.jpg" size="">
即所扒的图片标签内容匹配'<img class="BDE_Image" pic_type="1" width="450" height="450" src="(.*?)"'。不必把标签完整的表达都写出来,但要包含到src内容
2. r.findall()中的content后要有decode('utf-8')这样才是能看懂的utf-8格式网页源代码
3. os.mkdir(filename)新建文件夹;os.chdir(filename)更改路径到xx文件夹;os.getcwd()获取当前文件夹名(字符串)
4. urllib.request.urlretrieve(pic,pic_name) 保存图片到上述路径并设定文件名
保存的文件如下图:
今后看到美少年的皂片不必再无限右键了,朕心甚慰_(:3 」∠)_
哦,要是在贴吧、堆糖想下载xx页到xx页图片怎么办,。Ծ ‸ Ծ。
比如上面那个图片贴,网址是酱紫的:
http://tieba.baidu.com/p/4341640851?pn=1 #第1页
http://tieba.baidu.com/p/4341640851?pn=2 #第2页
http://tieba.baidu.com/p/4341640851?pn=3 #第3页
http://tieba.baidu.com/p/4341640851?pn=4 #第4页
...
http://tieba.baidu.com/p/4341640851?pn=n #第n页
那就改一下代码啦,在原先的函数里添加两个参数m——起始页数,n——结束页数,即fetch_pictures(url, m, n):
import urllib.request
import re
import os def fetch_pictures(url, m, n): os.chdir(os.path.join(os.getcwd(), 'pic_collection'))
temp = 1 # 记录图片张数 for x in range(n-m+1):
html_content = urllib.request.urlopen(url + "?pn=" + str(n+x-1)).read() # key!
r = re.compile('<img class="BDE_Image" pic_type="1" width="450" height="450" src="(.*?)" ')
picture_url_list = r.findall(html_content.decode('utf-8'))
print(picture_url_list) for i in range(len(picture_url_list)):
picture_name = str(temp) + '.jpg'
urllib.request.urlretrieve(picture_url_list[i], picture_name)
print("Success!" + picture_url_list[i])
temp += 1 fetch_pictures("http://tieba.baidu.com/p/4341640851", 1, 3)
这样就可以下载第1~3页的图片了,想下整张帖子的图片就看下页数自己改呗。
【python小练】0013的更多相关文章
- 【python小练】0014题 和 0015 题
第 0014 题: 纯文本文件 student.txt为学生信息, 里面的内容(包括花括号)如下所示: { ":["张三",150,120,100], ":[& ...
- 【python小练】0010
第 0010 题:使用 Python 生成类似于下图中的字母验证码图片 思路: 1. 随机生成字符串 2. 创建画布往上头写字符串 3. 干扰画面 code: # codeing: utf-8 fro ...
- 【python小练】0005
第 0005 题:你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小. 首先,iphone5的分辨率是1136x640. if条件句判断横(纵)向是否大于对应的ipho ...
- 【python小练】0004
第 0004 题:任一个英文的纯文本文件,统计其中的单词出现的个数. 先回忆一下各种括号的用途: () tuple [] list {} dict ([]) set——需要一个list作为输入合集 c ...
- 【python小练】0002
第 0002 题:将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中. . . .(一脸懵逼) Python访问数据库:(廖雪峰python教程) 1. SQLi ...
- 【python小练】0001
第 0001 题:做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? # coding ...
- python小练--使用正则表达式将json解析成dict
练习python语法,自己实现了一个简单的解析json字符,存为dict字典对象. { "id":12, "name":"jack", &q ...
- python 小练手
监控 主动监控 - 服务器端轮询客户端 被动监控-客户端agent上报到服务器端 混合模式---两种都支持 需求 1个性化的监控需求 2每个服务的监控间隔不同 3混合模式的监控
- 【python小练】0020
第 0020 题: 登陆中国联通网上营业厅 后选择「自助服务」 --> 「详单查询」,然后选择你要查询的时间段,点击「查询」按钮,查询结果页面的最下方,点击「导出」,就会生成类似于 2014年1 ...
随机推荐
- docker命令篇
基础命令: 镜像: 获取镜像 $ docker pull centos:7 下拉自己仓库镜像,在后面仓库部分会讲到. 列出镜像: $ docker image ls 删除镜像: $ docker im ...
- A.01.03-模块的输入—模拟量输入
模拟量输入在使用过程中也十分常见,它在很多场合都应用到,但其用法又各有不同,下面列举一些常见的类型进行说明. 第一种为采用模拟口读取离散量的状态,如某开关可能有高.低.悬空三种状态均需能准确判断,这种 ...
- centos7下mysql半同步复制原理安装测试详解
原理简介: 在MySQL5.5之前,MySQL的复制其实都是异步复制(见下图),主库和从库的数据之间存在一定的延迟,这样存在一个隐患:当在主库上写入一个事务并提交成功,而从库尚未得到主库推送的BinL ...
- 如何在Windows 10上运行Docker和Kubernetes?
如何在Windows 10上运行Docker和Kubernetes? 在Windows上学习Docker和Kubernetes,开始的时候会让你觉得无从下手.最起码安装好这些软件都不是一件容易的事情. ...
- apache ArrayUtils 工具类
org.apache.commons.lang3.ArrayUtils // 1.add():将给定的数据添加到指定的数组中,返回一个新的数组. int[] arr = { 1, 2, 3 }; in ...
- 关于TSql
1.Sql:结构化查询语言(Structrued Query Language) 2.TSql:是Sql语言的另一种版本,且只能在SqlServer中使用.和Sql不同的是,TSql中增加了对变量 ...
- 常用的git操作
(转)仅供自己学习,特此转发记录 链接:Git命令清单
- 用tkinter制作签名设计窗口
效果如下: from tkinter import * from tkinter import messagebox import requests import re from PIL import ...
- mysql ibdata1损坏
机房一台服务器上的mysql运行一段时间了,突然出现了一个很奇怪的现象:重启后无法恢复了!准确情况是:启动mysql后随即就又关闭了. 查看mysql错误日志如下: 160920 22:41:41 m ...
- Luogu P2575 高手过招
题目链接 \(Click\) \(Here\) 关键在于转换成阶梯\(Nim\)的模型.最开始把题目看错了,理解正确后发现棋子可以向后跳不止一位,那么就比较简单了. 这里把空格看做阶梯,棋子看做硬币, ...