【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 ...
随机推荐
- Scout YYF I POJ - 3744(概率dp)
Description YYF is a couragous scout. Now he is on a dangerous mission which is to penetrate into th ...
- Zabbix-proxy安装部署
原文链接:https://www.cnblogs.com/irockcode/p/6754659.html 环境: 因为公司需要监控远程客户机,但server端无法主动连接agent端,客户端可以连接 ...
- Java 帝国之建造者模式
Java 帝国之建造者模式 原创: 王钦誉 码农翻身 今天 本文来自王钦誉的投稿,老刘做了较大修改. 原文地址: https://xiaoqinyu0000.github.io/2018/06/11/ ...
- A1139. First Contact
Unlike in nowadays, the way that boys and girls expressing their feelings of love was quite subtle i ...
- R: 修改镜像、bioconductor安装及go基因富集分析
1.安装bioconductor及go分析涉及的相关包 source("http://bioconductor.org/biocLite.R") options(BioC_mirr ...
- java利用线程池处理集合
java利用线程池处理集合 2018年07月23日 17:21:19 衍夏成歌 阅读数:866 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/s ...
- JS with
<script type="text/javascript"> function Dog(){ this.type="dog"; this.tail ...
- HTML学习笔记Day15
一.CSS3渐变 (一).CSS3渐变(gradient)可以让你在两个或多个指定的颜色之间显示平稳的过度:渐变效果比使用图片在放大时看起来效果更好,因为渐变(gradient)是由浏览器生成的 1. ...
- 看我如何未授权登陆某APP任意用户(token泄露实例)
转载:https://www.nosafe.org/thread-333-1-1.html 先来看看这个. 首先,我在登陆时候截取返回包修改id值是无效的,因为有一个token验证,经过多次登陆 ...
- qml: 软件启用前插入广告;
一般来说,免费软件或者部分商业软件在发布前都会放一些广告在软件上. 下面是我自己的方案(哪位有更好的方案,请告知,先谢): ...... ApplicationWindow{ visible: !ad ...