欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-03 20:04:27
...

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()

 

 

相关标签: Python爬虫