【先更!!】爬虫之动态网站~~爬图片辣(也是我的第二个python爬虫emmmm

匿名 (未验证) 提交于 2019-12-02 22:11:45

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

看一下运行结果吧~~~

爬虫的一般步骤:

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!