使用Python爬取网站图片
2018-03-11 15:47
134 查看
使用Python爬取网站图片
需要的工作环境:(或其它python编程软件) Python 3.6官方下载 我们这里以sogou作为爬取的对象。 首先我们进入搜狗图片http://pic.sogou.com/,进入壁纸分类(当然只是个例子),因为如果需要爬取某网站资料,那么就要初步的了解它......进去后就是这个,然后F12进入开发人员选项,我用的是Chrome。
发现我们需要的图片src是在img标签下的,于是先试着用 Python 的 requests提取该组件,进而获取img的src然后使用 urllib.request.urlretrieve逐个下载图片,从而达到批量获取资料的目的,思路好了,下面应该告诉程序要爬取的url为http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD,此url来自进入分类后的地址栏。明白了url地址我们来开始编写:在写这段爬虫程序的时候,最好要逐步调试,确保我们的每一步操作正确,线面我们来剖析该url指向的网页。import requests
import urllib
from bs4 import BeautifulSoup
res = requests.get('http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD')
soup = BeautifulSoup(res.text,'html.parser')
print(soup.select('img'))output:
发现输出内容并不包含我们要的图片元素,而是只剖析到logo的img,这显然不是我们想要的。也就是说需要的图片资料不在url 即 http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD里面。因此考虑可能该元素是动态的,细心的同学可能会发现,当在网页内,向下滑动鼠标滚轮,图片是动态刷新出来的,也就是说,该网页并不是一次加载出全部资源,而是动态加载资源。这也避免了因为网页过于臃肿,而影响加载速度。下面痛苦的探索开始了,我们是要找到所有图片的真正的url 笔者也是刚刚接触,找这个不是太有经验。最后找的位置F12>>Network>>XHR>>(点击XHR下的文件)>>Preview。
发现,有点接近我们需要的元素了,点开all_items 发现下面是0 1 2 3......一个一个的貌似是图片元素。试着打开一个url。发现真的是图片的地址。找到目标之后。点击XHR下的Headers得到第二行Request URL:http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start=0&len=15&width=1536&height=864,试着去掉一些不必要的部分,技巧就是,删掉可能的部分之后,访问不受影响。经笔者筛选。最后得到的url:http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%8
bb0a
3%A8&start=0&len=15 字面意思,知道category后面可能为分类。start为开始下标,len为长度,也即图片的数量。好了,开始愉快的代码时间吧: 开发环境为Win7 Python 3.6,运行的时候Python需要安装requests,Python3.6 安装requests 应该CMD敲入:pip install requests 最终代码:
import requests import json import urllib def getSogouImag(category,length,path): n = length cate = category imgs = requests.get('http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category='+cate+'&tag=%E5%85%A8%E9%83%A8&start=0&len='+str(n)) jd = json.loads(imgs.text) jd = jd['all_items'] imgs_url = [] for j in jd: imgs_url.append(j['bthumbUrl']) m = 0 for img_url in imgs_url: print('***** '+str(m)+'.jpg *****'+' Downloading...') urllib.request.urlretrieve(img_url,path+str(m)+'.jpg') m = m + 1 print('Download complete!') getSogouImag('壁纸',2000,'d:/download/壁纸/')程序运行时:
整体来看,找到需要爬取元素所在url,是爬虫诸多环节中的关键。
相关文章推荐
- 使用python来批量抓取网站图片
- 使用python进行爬虫下载指定网站的图片
- python中使用urllib下载网站图片
- 使用python爬下了某网站的图片
- python成长日记1:使用python访问网站,下载图片
- 使用Python获取网站的图片(2.7和3版本)
- Python使用代理抓取网站图片(多线程)
- python3使用多代理访问网站
- 在python中可以使用urllib方便的实现图片和flash下载
- Asp.net网站使用HttpHandler实现图片防盗链功能
- python官方网站的下载链接竟然特意使用了中文标示“下载” (for china)
- Python urllib2递归抓取某个网站下图片
- 使用Python将文本转为图片
- 烂泥:使用火狐解决网站图片不能复制下载的问题
- 30个漂亮的使用图片作为大背景的网站设计案例
- python处理图片之PIL模块简单使用
- 谈谈网站设计时图片的使用
- 黄聪:使用 Python 登录网站
- 使用Python下载整个网站的连接,适合能目录浏览的网站。