第一周/第四节项目练习: 下载美女图片

1. 引言

爬取20页美眉图片

Paste_Image.png

网址: http://weheartit.com/inspirations/taylorswift

2. 分析

页数即为最后1个数字

  • 每个导航页中有24张图片的地址
  • 指定系统中一个文件夹, 将图片下载保存至其中
  • 每次下载前判断图片是否已经保存了

3. 实现代码

# vim spider_taylor.py  //新建文件, 代码如下
#!/usr/bin/env python3                                                                                                       
# -*- coding: utf-8 -*-                                                                                                      
                                                                                                                             
                                                                                                                             
from bs4 import BeautifulSoup                                                                                                
import requests                                                                                                              
import os                                                                                                                    
                                                                                                                             
                                                                                                                             
headers = {                                                                                                                  
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36'
}                                                                                                                            
                                                                                                                             
# 下载图片有点慢,用代理                                                                                                     
proxies = {"http": "127.0.0.1:8118"}                                                                                         
# 定义列表用来存放图片地址                                                                                                   
pic_lists = []                                                                                                               
                                                                                                                             
                                                                                                                             
# 定义获取图片地址函数                                                                                                       
def get_pic_from(url):                                                                                                       
                                                                                                                             
    wb_data = requests.get(url, headers=headers)                                                                             
    if wb_data.status_code != 200:                                                                                           
        print('%s Request Error!' % wb_data.status_code)                                                                     
    else:                                                                                                                    
        soup = BeautifulSoup(wb_data.text, 'lxml')                                                                           
        links = soup.select('a.js-entry-detail-link > img')                                                                  
                                                                                                                             
        for link in links:                                                                                                   
            pic_link = link.get('src')                                                                                       
            # 每获取到一个地址,就放入列表pic_lists中                                                                        
            pic_lists.append(pic_link)
            # 打印图片地址                                                                                                   
            print(pic_link)                                                                                                  
                                                                                                                             
                                                                                                                             
# 定义下载图片函数                                                                                                           
def down_pic_from(pic_url):                                                                                                  
                                                                                                                             
    # 图片存放路径                                                                                                           
    file_folder = '/home/wjh/taylor/'                                                                                        
    # 截取url中的图片名字,并将其和路径组合                                                                                   
    file_path = file_folder + pic_url.split('/')[-2] + '.' + pic_url.split('.')[-1]                                          
    # 判断图片存在与否, 存在则输出其路径和大小                                                                               
    if os.path.exists(file_path):                                                                                            
        print('"%s" File exists... : %d K' % (file_path, os.path.getsize(file_path)//1024))                                  
    else:                                                                                                                    
        sub_data = requests.get(pic_url, proxies=proxies, headers=headers)                                                   
        if sub_data.status_code != 200:                                                                                      
            print('%s Request Error!' % sub_data.status_code)                                                                
        # 保存图片                                                                                                           
        with open(file_path, 'wb') as fs:                                                                                    
            fs.write(sub_data.content)                                                                                       
        # 保存完后打印图片地址、路径、大小                                                                                   
        print("%s => %s - %d K" % (pic_url, file_path, os.path.getsize(file_path)//1024))                                    
                                                                                                                             
# 所有要请求的页面地址存入一个列表中                                                                                         
urls = ['http://weheartit.com/inspirations/taylorswift?page={}'.format(i) for i in range(1, 21)]                              
                                                                                                                             
# 获取图片地址列表                                                                                                           
for url in urls:                                                                                                             
    get_pic_from(url)                                                                                                        
                                                                                                                             
# 从列表pic_lists中逐个取出图片地址放入下载函数中以下载图片
for url in pic_lists:                                                                                                        
    down_pic_from(url)
# python3 spider_taylor.py  //运行输出如下
http://data.whicdn.com/images/247905262/superthumb.jpg
http://data.whicdn.com/images/247922201/superthumb.png
http://data.whicdn.com/images/247820953/superthumb.png
http://data.whicdn.com/images/120752508/superthumb.jpg
http://data.whicdn.com/images/127306344/superthumb.jpg
http://data.whicdn.com/images/247922493/superthumb.png
http://data.whicdn.com/images/247852730/superthumb.jpg
.
.
.
http://data.whicdn.com/images/247824232/superthumb.jpg
http://data.whicdn.com/images/246004790/superthumb.gif
http://data.whicdn.com/images/247923478/superthumb.jpg
.
.
.
"/home/wjh/taylor/189891880.gif" File exists... : 32 K
"/home/wjh/taylor/189891478.gif" File exists... : 60 K
"/home/wjh/taylor/222639313.gif" File exists... : 62 K
"/home/wjh/taylor/194658386.png" File exists... : 113 K
"/home/wjh/taylor/190061497.jpg" File exists... : 92 K
"/home/wjh/taylor/181241808.jpg" File exists... : 36 K
"/home/wjh/taylor/238329467.jpg" File exists... : 29 K
http://data.whicdn.com/images/247822005/superthumb.jpg => /home/wjh/taylor/247822005.jpg - 23 K
http://data.whicdn.com/images/247821899/superthumb.jpg => /home/wjh/taylor/247821899.jpg - 30 K
http://data.whicdn.com/images/247853275/superthumb.jpg => /home/wjh/taylor/247853275.jpg - 30 K
.
.
.
http://data.whicdn.com/images/247859540/superthumb.jpg => /home/wjh/taylor/247859540.jpg - 25 K
http://data.whicdn.com/images/247854181/superthumb.jpg => /home/wjh/taylor/247854181.jpg - 29 K
http://data.whicdn.com/images/247898534/superthumb.jpg => /home/wjh/taylor/247898534.jpg - 20 K
http://data.whicdn.com/images/247906728/superthumb.jpg => /home/wjh/taylor/247906728.jpg - 19 K

4. 总结

  • with open方法有好几种:
    • r: 只读打开
    • w: 写打开
    • rb: 二进制只读打开
    • wb: 二进制写打开
  • 用到的os.path几个方法:
    • exists(): 判断文件在与否
    • getsizes(): 判断文件大小, 单位是byte
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,030评论 4 62
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,522评论 25 707
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,159评论 9 467
  • 没身于喧嚣中 车水马龙里叽叽喳喳 匆忙的都是路人 想此刻叫停时间的脚步 淹没了梦想 一滴一滴流淌远方 行走,归家 ...
    深白树阅读 166评论 0 0
  • 上海迪斯尼还没有开的时候,宝贝就惦记上了,后来他好朋友来了之后,更是觉得心心念念要来一次迪斯尼。 上周四老公临时通...
    爸爸妈妈宝贝幸福一家人阅读 354评论 0 0