1.导入须要的模块requests,BeautifulSoup,os(用于文件读写)。css
2.建立一个类,并初始化。html
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.先请求图片所在的网页,返回网页responsepython
def request(self, url): # 返回网页response r = requests.get(url, self.headers) # 向目标url地址发送get请求,返回一个response对象 return r
调用request方法,print(r.text)就能够看到控制台上print出的网页源码了。web
4.经过BeautifulSoup工具获取须要抓取的img标签,这里根据不一样的网页布局css选择器也会有不一样:chrome
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,网页具体代码格式为浏览器
<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.获取到图片地址连接后,就能够下载图片并保存到本地了。那么就须要确认初始化定义的文件夹是否存在,若是不存在,须要建立。布局
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.接下来就能够保存图片了。flex
第四步操做,在get_pic方法中,获取到全部图片所在的div标签后,先确保存放图片的文件下是否存在,调用方法url
self.mkdir(self.folder_path) # 建立文件夹
os.chdir(self.folder_path) # 切换路径至上面建立的文件夹
遍历全部的div,根据url名中jpg/png的不一样,决定保存图片的后缀名
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方法为:
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方法为:
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