python爬虫案例--图片下载器

本文介绍了一个Python爬虫案例,专注于下载特定关键字的表情包。爬虫步骤包括需求分析、网页源代码分析、正则表达式编写及Python爬虫代码实现。通过urlib模块或requests模块进行模拟浏览器访问,并讨论了如何设置代理服务器来应对反爬策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

案例:图片下载
爬虫步骤:
1.需求分析(本案例中爬去特定关键字的表情包,实现两个功能,搜索图片和自动下载)
2.分析网页源代码,配合F12
3.编写正则表达式或者其他解析器代码
4.正式编写python爬虫代码

代码实现:

"""
Created on Mon Aug 12 22:06:51 2019

@author: Omega_Sendoh
"""

"""
Date: 2019--07 10:29
User: yz
Email: 1147570523@qq.com
Desc:
"""
"""
图片批量下载器
"""
import os
import requests
import re
def downloadPic(html,keyword):
    #每个图片对应一个url地址,用正则表达式获取所有(指定数目)图片地址
    pic_url = re.findall('"objURL":"(.*?)",',html,re.s)[:20]
    count=0
    print("找到关键字:"+keyword+'的图片开始下载')
    
    #用for循环取出pic_url中每个图片的url地址
    for each in pic_url:
        print("正在下载第"+str(count+1)+'张图片,图片地址:'+str(each))
        
        try:
            #更改代理
            headers={
                    'User-Agent':"Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
                    }
            #从url地址中获取图片
            pic = requests.get(each,timeout=10,headers=headers)
       
        except requests.exceptions.ConnectionError:
            print("【错误】当前图片无法下载")
            count+=1
            continue
        except Exception as e:
            print("当前图片无法下载")
            print(e)
            continue
        else:
            if pic.status_code!=200:
                print("请求失败!")
                continue
        
        #生成文件夹储存图片
        if not os.path.exists(imgDir):
            print("正在创建目录",imgDir)
            os.makedirs(imgDir)
        #查看图片后缀
        posix = each.split(".")[-1]
        print("正在创建目录",imgDir)
        
        #图片名称
        name = keyword + '_' + str(count)+ '.' + posix
        
        filename = os.path.join(imgDir,name)
        count +=1
        with open (filename,'wb') as f:
            f.write(pic.content)
        
        
if __name__ == '__main__':
     imgDir = 'pictures'
     word = input('输入关键字信息:')
     url="http://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word="+word
     #从网页url中获取信息
     try:
         result = requests.get(url)
     except Exception as e:
        print(e)
        content=''
     
     else:
         content = result.text
     downloadPic(content,word)

urlib模块和requests模块
urllib的第一种方式:
浏览器的模拟
应用场景:有些网页为了防止别人恶意采集其信息所以进行了一些反爬虫的设置,而我们又想进行爬取。
解决方法:设置一些Headers信息(User-Agent),模拟成浏览器去访问这些网站。

第二种方式requests模块
代理服务器的设置
应用场景:使用同一个IP去爬取同一个网站上的网页,久了之后会被该网站服务器屏蔽。
解决方法:使用代理服务器。(使用代理服务器去爬取某个网站的内容的时候,在对方的网站上,显示的不是我们真实的IP地址,而是代理服务器的IP地址)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值