python爬取图片


1.导入需要的模块requests,BeautifulSoup,os(用于文件读写)。

  2.创建一个类,并初始化。

 
1
2
3
4
5
6
7
8
class BeautifulPicture:
     def __init__( self ):  # 类的初始化操作
         self .headers = {
             # 给请求指定一个请求头来模拟chrome浏览器
             'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64)'
                           ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' }
         self .web_url = 'url'  # 要访问的网页地址
         self .folder_path = 'E:\\1\\pic'  # 设置图片要存放的文件目录

  3.先请求图片所在的网页,返回网页response

 
1
2
3
def request( self , url):  # 返回网页response
     r = requests.get(url, self .headers)  # 向目标url地址发送get请求,返回一个response对象
     return r

  调用request方法,print(r.text)就可以看到控制台上print出的网页源码了。

  4.通过BeautifulSoup工具获取需要抓取的img标签,这里根据不同的网页布局css选择器也会有不同:

 
1
2
3
4
5
6
def get_pic( self ):
     r = self .request( self .web_url)
     all_item = BeautifulSoup(r.text, 'html.parser' ).select( ".search_results > .item" )
     for item in all_item:
         img = item.find( 'a' ).find( 'img' )
         url = img[ 'src' ]

  此处,我是先抓取img所在的div(类名为item),再获取div下的a链接下的img,网页具体代码格式为

 
1
2
3
4
5
6
7
8
< div class="flex_grid credits search_results" style="margin:4px 14px 0 15px">       
     < div class="item" data-w="640" data-h="256">
         < a href="">
             < img srcset="" src="" alt="">
         </ a >
     </ div >
     ......
</ div >

  通过遍历可以获取所有图片的链接。

  5.获取到图片地址链接后,就可以下载图片并保存到本地了。那么就需要确认初始化定义的文件夹是否存在,如果不存在,需要创建。

 
1
2
3
4
5
6
7
8
9
def mkdir( self , path):  # 创建文件夹
     path = path.strip()
     is_exists = os.path.exists(path)
     if not is_exists:
         print ( '创建名字叫做' , path, '的文件夹' )
         os.makedirs(path)
         print ( '创建成功!' )
     else :
         print (path, '文件夹已经存在了,不再创建' )

  6.接下来就可以保存图片了。

  第四步操作,在get_pic方法中,获取到所有图片所在的div标签后,先确保存放图片的文件下是否存在,调用方法

  self.mkdir(self.folder_path) # 创建文件夹  

  os.chdir(self.folder_path) # 切换路径至上面创建的文件夹

  遍历所有的div,根据url名中jpg/png的不同,决定保存图片的后缀名

 
1
2
3
4
5
6
7
8
9
i = 1  # 后面用来给图片命名
for item in all_item:
     img = item.find( 'a' ).find( 'img' )
     url = img[ 'src' ]
     if url.count( 'jpg' ) > 0 :
         self .save_img(url, str (i) + '.jpg' )
     elif url.count( 'png' ) > 0 :
         self .save_img(url, str (i) + '.png' )
     i + = 1

  其中save_img方法为:

 
1
2
3
4
5
6
def save_img( self , url, name):  # 保存图片
     img = self .request(url)
     f = open (name, 'ab' )
     f.write(img.content)
     print (name, '文件保存成功!' )
     f.close()

  创建MyBeautifulPicture类的实例,调用get_pic方法,至此,保存图片到本地就可以实现了。

  完整的get_pic方法为:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def get_pic( self ):
     r = self .request( self .web_url)
     all_item = BeautifulSoup(r.text, 'html.parser' ).select( ".search_results > .item" )
     self .mkdir( self .folder_path)  # 创建文件夹
     os.chdir( self .folder_path)  # 切换路径至上面创建的文件夹
     i = 1  # 后面用来给图片命名
     for item in all_item:
         img = item.find( 'a' ).find( 'img' )
         url = img[ 'src' ]
         # print(url)
         if url.count( 'jpg' ) > 0 :
             self .save_img(url, str (i) + '.jpg' )
         elif url.count( 'png' ) > 0 :
             self .save_img(url, str (i) + '.png' )
         i + = 1


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM