1. urllib库是python内置的,无需我们额外安装,只要安装了Python就可以使用。
2. requests库:这是一个很强大的第三方库,很好用呐~所以我们用它来获取网页的HTML信息。
在cmd中使用如下指令安装requests
或者
requests的官方中文教程地址:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html
感兴趣的宝贝儿可以去看看
3.BeautifulSoup库:一款优秀的HTML/XML解析库,用来做爬虫,不用考虑编码,很强大很好用
安装方法和requests类似,同样官方中文教程:https://beautifulsoup.readthedocs.io/zh_CN/latest/
4.Fidder工具:这是一个用来抓包的软件,能够截获所有的HTTP通讯。一般网站都会有反爬机制,我们用这个软件来分析网页,或者在爬取动态网站时,也要用这个软件来分析网页,找到他的JavaScript脚本!!......等
下载地址:https://www.telerik.com/fiddler
用的话,也蛮简单哒!
在安装之后需要改下配置:tools--->options--->https,不然的话,抓到的好多网页都显示加密!
爬虫的辅助工具还有很多,而在这块,我们暂时只用到了这几个,所以只简单的介绍了下这几个辣。
三. 开爬!!!!
网站URL:https://unsplash.com/
1.使用requests来获取整个网页的HTML信息
2.使用BeautifulSoup解析HTML信息,找到所有<img>标签,提取src属性,获取图片的url
3.当然是根据拿到的图片的url来下载图片啦~~
1.首先获取整个网页的HTML信息,来找<img>标签:
""" Created on Thu Nov 22 14:44:26 2018 @author: 小象 """ import requests if __name__ == '__main__': target = 'https://unsplash.com/' req = requests.get(url=target) print(req.text) 运行结果:
网页源码:
EN对!还有这个JavaScript的请求地址(仔细瞅瞅),放在下图吧!
对!没错!就是这个:http://unsplash.com/napi/photos?page=1&per_page=10&order_by=latest
分析发现,在这个返回的数据信息里面,我们找到了图片的id,大小,链接等,那么~~是不是稍微有点头绪了咩。
那么我们在继续这个网站的分析,之前用Fiddler软件有分析出一些东西,但是始终感觉抓不住???嗯?(是不熟悉emmmm)哈哈,后面用浏览器自带的NetWorks分析了一下(好像也蛮好用),如下图:
在不断往下拉进度条之后,会发现这个page在变,那么~~~不妨有一个大胆的想法,对哒!!!让这个page一直在变的话,就可以拿到好多好多的图片啦,再继续看!
# -*- coding: utf-8 -*- """ Created on Fri Nov 23 11:15:46 2018 @author: 小象 """ import requests,json if __name__ == '__main__': page_num = 1 target = 'http://unsplash.com/napi/photos?page=xxx&per_page=30&order_by=latest' target = target.replace('xxx',str(page_num)) req = requests.get(url=target, verify=False) # 分析json脚本 html = json.loads(req.text) image_count = 0 # 获取到了图片id和url,通过url就可以下载,然后保存在本地 for index, each in enumerate(html): print(image_count) print('图片id:', each['id']) print('urls:', each['urls']['small']) image_count += 1 这个,以防报SSL认证错误,SSL认证是指客户端到服务器端的认证,一个非常简单的解决错误的方法就是设置一下这个requests.get()方法的verify参数。这个参数默认设置为True,也就是执行认证。我们将其设置为False,绕过认证不就可以啦!
看一下吧,就是这个:
# 保存图片 def save_img(file_save_path, img_id, img_url): try: # 是否有这个路径 if not os.path.exists(file_save_path): # 创建路径 os.makedirs(file_save_path) res_filename = '{}{}{}.{}'.format(file_save_path, os.sep, img_id, find_suffix(img_url)) print(res_filename) # 下载图片,并保存到文件夹中 urllib.request.urlretrieve(img_url, filename=res_filename) except IOError as e: print("IOError") except Exception as e: print("Exception") # -*- coding: utf-8 -*- """ Created on Mon Nov 19 14:24:19 2018 @author: 小象 """ from urllib.parse import urlsplit import requests, json, os, urllib # 获取图片的后缀 def find_suffix(url): url_return = url.split('?') res = res = urllib.parse.parse_qs(url_return[1]) res_new = str(res['fm']).replace("['", "").replace("']", "") return str(res_new) # 保存图片 def save_img(file_save_path, img_id, img_url): try: # 是否有这个路径 if not os.path.exists(file_save_path): # 创建路径 os.makedirs(file_save_path) res_filename = '{}{}{}.{}'.format(file_save_path, os.sep, img_id, find_suffix(img_url)) print(res_filename) # 下载图片,并保存到文件夹中 urllib.request.urlretrieve(img_url, filename=res_filename) except IOError as e: print("IOError") except Exception as e: print("Exception") if __name__ == '__main__': file_path = 'C:/Users/10796/Desktop/爬虫img_save' page_num = 1 image_count = 0 while True: target = 'http://unsplash.com/napi/photos?page=xxx&per_page=10&order_by=latest' target = target.replace('xxx',str(page_num)) req = requests.get(url=target, verify=False) # 分析json脚本 html = json.loads(req.text) # 获取到了图片id和url,通过url就可以下载,然后保存在本地 for index, each in enumerate(html): print('正在下载第%d张图片' % (image_count+1)) print('图片id:', each['id']) print('urls:', each['urls']['small']) save_img(file_path, each['id'], each['urls']['small']) image_count += 1 page_num += 1 看一下运行结果吧~~~
爬虫的一般步骤: