Python爬虫:urllib.request库下载图片

1、说明:

       使用urllib.request库请求汽车之家网页,返回报文用BeautifulSoup解析后提取出图片的下载链接,再使用urllib.request库下载图片到指定目录

2、代码:

'''
在本python文件所在的目录下新建文件夹“mrsoft”,在“mrsoft”下新建四个文件夹:
车身外观、车厢座椅、其他细节、中控方向盘。
在汽车之家网站上下载图片分别放入以上四个文件夹里,并将图片文件名编好号
不足:比方说“车厢座椅”有103张图片,本程序只下载了第一页的62张
'''
import time
import urllib.request
from bs4 import BeautifulSoup
import os

class ReTbmm():
    def Retbmm(self):
        start = time.time()
        self.cdir = os.getcwd()
        # https://www.autohome.com
        # 车身外观
        url1 ='https://car.autohome.com.cn/pic/series-s32890/385-1.html#pvareaid=2023594'
        # 中控方向盘
        url2='https://car.autohome.com.cn/pic/series-s32890/385-10.html#pvareaid=2042220'
        # 车厢座椅
        url3 = 'https://car.autohome.com.cn/pic/series-s32890/385-3.html#pvareaid=2042220'
        # 其他细节
        url4 = 'https://car.autohome.com.cn/pic/series-s32890/385-12.html#pvareaid=2042220'
        self.getImag('车身外观',url1)
        self.getImag('中控方向盘', url2)
        self.getImag('车厢座椅', url3)
        self.getImag('其他细节', url4)
        end=time.time()
        print('run time:'+str(end -start))

    def getImag(self,name,urls):
        '''加上头部信息是为了解决反爬虫设置,
        头部信息获取方式:在网页空白处右键“审查元素”,点击网络监视器Network,按F5刷新
        网页,在Network拖到最下方找到“User-Agent”
        '''
        user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240'
        headers={'User-Agent':user_agent}
        request= urllib.request.Request(urls,headers=headers)
        response =urllib.request.urlopen(request)
        bsObj = BeautifulSoup(response,'html.parser')
        #找出所有以“<img”开头的节点
        #如: <img width="240" height="35" alt="汽车之家产品库" src="//x.autoimg.cn/car/images/logonew.png" />
        t1 =bsObj.find_all('img')
        for t2 in t1:
            t3 =t2.get('src')#获取该节点中的src字段,返回字符串,如://x.autoimg.cn/car/images/logonew.png
            print(t3)
        path = self.cdir +'/mrsoft/'+str(name)
        if not os.path.exists(path):
            os.makedirs(path)
        n =0
        for img in t1:
            n=n+1
            link =img.get('src')#获取该节点中的src字段,返回字符串,如://x.autoimg.cn/car/images/logonew.png
            if link:
                s ='http:'+str(link)#拼装图片完整的网址,如http://x.autoimg.cn/car/images/logonew.png
                i = link[link.rfind('.'):]#图片的后缀,如:.png
                try:
                    request=urllib.request.Request(s)
                    response =urllib.request.urlopen(request)
                    imgData=response.read()#图片的二进制数据流
                    pathfile =path+r'/'+str(n)+i #路径+图片编号+原始图片后缀
                    with open( pathfile,'wb') as f:
                        f.write(imgData) #将图片的二进制数据流写入文件
                        f.close()
                        print('下载完成图片'+str(n))
                except:
                    print('11')


if __name__ =='__main__':
    ui =ReTbmm()
    ui.Retbmm()

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值