python3.5——爬虫实现批量下载图片(正则表达式法和BeautifulSoup第三方库法)

先来例程:

正则表达式法:(不推荐)

# -*- coding: utf-8 -*-
"""
Created on Thu Jun  1 16:22:10 2017

@author: qiu
"""
import urllib
import re
##下载网页
def get_content(url):
    '''
    @url:需要下载的网址
    下载网址
    '''
    html = urllib.request.urlopen(url)
    content = html.read().decode('utf-8')#转码
    html.close()#记得要将打开的网页关闭,否则会出现意想不到的问题
#    print (type(content))
    return content

#print (get_content(url))    

def get_image(info):
    '''
    @info:网页信息
    查看下载内容的编码格式
    
    
    利用正则表达式学习样式规则
    下载图片
    '''
    #正则表达式写法是重点
    regx = r'pic_type="0" class="BDE_Image" src="(.+?\.jpg)"'
    pat = re.compile(regx)    
    image_code = re.findall(pat,info)
    print(type(image_code))
    #一个一个保存
    i=1
    for image_url in image_code:
        print(image_url)
        urllib.request.urlretrieve(image_url,"C:\\Users\\qiu\\Desktop\\python源\\桌面图片\\%s.jpg"%(i))
        i+=1

url = "https://tieba.baidu.com/p/2218566379"    
info = get_content(url)
get_image(info) 
BeautifulSoup法:

# -*- coding: utf-8 -*-
"""
Created on Thu Jun  1 19:38:11 2017


@author: qiu
"""
import urllib
from bs4 import BeautifulSoup
#beautifulsoup方法,第三方库的方法,爬找网页 
## 下载网页
def get_content(url):
    '''
    @url:需要下载的网址
    下载网址
    '''
    html = urllib.request.urlopen(url)
    content = html.read().decode('utf-8')#转码
    html.close()#记得要将打开的网页关闭,否则会出现意想不到的问题
#    print (type(content))
    return content
    
def get_image(info):
    '''
    利用Soup第三方库实现抓取
    '''
    soup = BeautifulSoup(info,"lxml")#设置解析器为“lxml”
    all_image = soup.find_all('img',class_ = "BDE_Image")
    x=1  
    for image in all_image:
        print(all_image)
        urllib.request.urlretrieve(image['src'],"C:\\Users\\qiu\\Desktop\\python源\\桌面图片\\%s.jpg"%(x))
        x+=1
    
url = "https://tieba.baidu.com/p/2218566379" 
info = get_content(url)  
print (info) 
get_image(info)

总结:

1、首先熟悉网页编程,至少能知道图片对应程序中的位置,将所需要的图片的程序内容单独拿出来,并比较和其他噪声图片的区别,包括class,pic_type等,能够保证所需下载内容程序书写上的唯一性。

2、利用"re"正则表达式或者all_image = soup.find_all('img',class_ = "")  方法实现唯一化表达

3、一些技巧总结:print (type( ))利用查看返回值类型,列表?字典?对象?等,如果是class,一定有方法,利用print (dir( ))  查看对象的方法。或者直接看官网文档

问题:

1、一些动态网页需要另外技巧了,例如百度图片(康复机械臂)上的图片如何下载,是另外一个需要解决的问题。

更好的方法:scrapy(爬虫框架)

不过安装有点麻烦,当然我还是pip法:库


 

你可能感兴趣的:(机器学习——python)