最近几天,研究了一下一直很好奇的爬虫算法。这里写一下最近几天的点点心得。下面进入正文:html
你可能须要的工做环境:python
咱们这里以sogou做为爬取的对象。编程
首先咱们进入搜狗图片http://pic.sogou.com/,进入壁纸分类(固然只是个例子Q_Q),由于若是须要爬取某网站资料,那么就要初步的了解它…json
进去后就是这个啦,而后F12进入开发人员选项,笔者用的是Chrome。app
右键图片>>检查 jsp
发现咱们须要的图片src是在img标签下的,因而先试着用 Python 的 requests提取该组件,进而获取img的src而后使用 urllib.request.urlretrieve逐个下载图片,从而达到批量获取资料的目的,思路好了,下面应该告诉程序要爬取的url为http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD,此url来自进入分类后的地址栏。明白了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:spa
发现输出内容并不包含咱们要的图片元素,而是只剖析到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
获得第二行
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/壁纸/')