其实有了爬取的解决方案,用什么语言实现都是可以的,针对这个网站资源特性,根本就不用下载网页,解析网页也就免了,数据的保存也省了,就直接的发送请求,响应请求,之后对链接进行处理(有可能对链接进行url编码解码)就行了,最后就是下载了,至于下载这一环节,可以采用多线程单线程都可以,因为资源普遍在0~20m左右,多线程显得有点浪费,我这里就采用单线程了。

程序设计

针对资源的特性及分析(参考第一篇)我们只需要有一个整形数据加一个链接(这里分后"http://ishare.iask.sina.com.cn/download.php?fileid=")构造一个请求资源的url(假如:"http://ishare.iask.sina.com.cn/download.php?fileid=62934995");这样就写一个循环从一个数字增长到另一个数字,直到把数字范围内的链接请求完,整个资源也就下载完了

部分核心代码(C++/MFC)

#define SINA_AIWEN_DOWN_REFER      _T("http://ishare.iask.sina.com.cn/download/explain.php?fileid=")
#define SINA_AIWEN_DOWN_LOCATION    _T("http://ishare.iask.sina.com.cn/download.php?fileid=")
void CSinaSourceDown::ThreadFun()
{while(true){// 分配请求链接数据区段if (m_pWnd != NULL && IsWindow(m_pWnd->m_hWnd)){CSinaShareDlg* pDlg = (CSinaShareDlg*)m_pWnd;if (pDlg->m_dEndValue > _tcstod(pDlg->m_sEnd,NULL)){Notify(5,_T("线程结束"));return;}if (HANDLE_IS_VALID(pDlg->m_hMutxAssign)){Notify(5,_T("等待分配下载链接"));DWORD dw = WaitForSingleObject(pDlg->m_hMutxAssign, INFINITE);if(WAIT_OBJECT_0 == dw){m_tUrlInfor.m_dStartValue = pDlg->m_dEndValue;m_tUrlInfor.m_nRange = pDlg->m_nAssignRange;if (m_tUrlInfor.m_dStartValue + m_tUrlInfor.m_nRange > _tcstod(pDlg->m_sEnd,NULL)){m_tUrlInfor.m_nRange = (int)(_tcstod(pDlg->m_sEnd,NULL) - m_tUrlInfor.m_dStartValue);}pDlg->m_dEndValue = m_tUrlInfor.m_dStartValue + m_tUrlInfor.m_nRange;ReleaseMutex(pDlg->m_hMutxAssign);}}}else{Notify(5,_T("线程异常结束"));return;}TCHAR* psUrlRefer = SINA_AIWEN_DOWN_REFER;TCHAR* psUrl = SINA_AIWEN_DOWN_LOCATION;//while (true)//{double dStartValue = m_tUrlInfor.m_dStartValue;if (dStartValue > 0 && m_tUrlInfor.m_nRange > 0){CString sDownUrl;CString sLocation;sLocation = _T("");CString sReferer;sReferer = _T("");CString sTmp ;sTmp.Format(_T("%d"),m_tUrlInfor.m_nRange);Notify(2,sTmp);int nLost = 0;for (int n = 0; n < m_tUrlInfor.m_nRange; n++){Notify(1,_T("FINDING"));sTmp.Format(_T("%d"),n+1);Notify(3,sTmp);sTmp.Format(_T("%.lf"),dStartValue);Notify(6,sTmp);// 构造请求链接sLocation.Format(_T("%s%.lf"),psUrl,dStartValue);int i = 0;sReferer.Format(_T("%s%.lf"),psUrlRefer,dStartValue);while(1){bool bGet;if (i == 0){bGet = false;Notify(5,_T("POST"));// 初始化请求数据if(Init(sLocation,bGet,sReferer)){// 发送请求if(Start()){int nStat = GetServerState();if (nStat == 302){ // 跳转Notify(5,_T("REFER LOACTION1"));GetField(_T("Location"),sLocation);if (sLocation.IsEmpty()){break;}}else if (nStat == 200){  // 请求成功 ,记录下载链接if (i > 0){sDownUrl = sLocation;}else{Notify(5,_T("LOST"));sDownUrl = _T("");}break;}else{if (i > 0){sDownUrl = sLocation;}else{Notify(5,_T("LOST"));sDownUrl = _T("");}break;}}CloseSocket();}}else{Notify(5,_T("Get"));bGet = true;if(Init(sLocation,bGet)){if(Start()){int nStat = GetServerState();if (nStat == 302){Notify(5,_T("REFER LOACTION2"));GetField(_T("Location"),sLocation);}else if (nStat == 200){if (i > 0){sDownUrl = sLocation;}else{Notify(5,_T("LOST"));sDownUrl = _T("");}break;}else{if (i > 0){sDownUrl = sLocation;}else{Notify(5,_T("LOST"));sDownUrl = _T("");}break;}}CloseSocket();}}i++;}CloseSocket();if (!sDownUrl.IsEmpty()){// 下载数据if(!WriteData(sDownUrl)){nLost++;sTmp.Format(_T("%d"),nLost);Notify(4,sTmp);}Notify(7,_T(""));}else{nLost++;sTmp.Format(_T("%d"),nLost);Notify(4,sTmp);}dStartValue++;}Notify(5,_T("THREAD END"));}Notify(5,_T("线程结束"));}
}
上面的代码就是主要的下载代码了,一些请求下载先关的函数,不管在java 还是c++ 还是c#里都有对应的http协议对应的函数库或类库。
这个函数式一个线程函数,也就是说,可以开很多线程分区段去下载,我想你不会真的会用一个线程循环着从0开始下吧,针对电脑的配置,网速的情况,下载的时间段可以选择线程的个数可多可少(举个例子,我的电脑是i7,8G网速10m,晚上12点下载,我开了32个线程也是相当给力的,你就不用考虑服务器的带宽了,肯定比你本地的带宽牛逼,想想32个资源同时下载是个什么心情,一个字,爽呀),但是考虑下自己的硬盘,适当的下载下来玩玩也挺有意思的,听说有人把爱问上的免积分资源下载完了,
好啦就到这了,我也只能帮你们到这了,这么简单的原理,是个编程的都能写出来(小吹了下),如果想体验下用mfc写的,可以QQ我奥

注明

这个功能是针对免积分的资源,如果有积分的,我倒可以做,这里就不费舌了,感兴趣,给点小费啥的,我告诉你,开玩笑的啦,对于5m一下的资源,可以下的,如下图的"用手机下载",点下试试就知道了,程序里也是小小的改动下,就可以了,真正免积分我还是知道怎么做,这个么,你懂得意思意思,可以给你个解决方案,大方点的可以程序奉上

二、爬虫 - 新浪爱问共享资源全下载之功能实现相关推荐

  1. 今天修改了个仿新浪爱问的知识人系统,真累,部署真麻烦。

    网站的名字叫:我问你答网 网址是:http://www5tiwen.com 希望能很好的被百度和GOOGle收录.不然就没有意思了!

  2. 新浪爱问免积分下载---

    打开chrome 进入一个下载页面 鼠标移动到立即下载 图片 可以看到 下载接口是 downishare('xxx') xxx是所需要的积分, 因此在javascript控制台输入 downishar ...

  3. 新浪爱彩票DBA总监:为什么你的MySQL跑得很慢?

    其实这是一个老问题了: 为什么会觉得数据库比较慢呢? 再换种问法: 数据库优化要从哪些方面入手? 1第一点,硬件太老 硬件我们这里主要从CPU.内存.磁盘三个方面来说下,还有一些因素比如网卡,机房网络 ...

  4. 前端案例二:新浪首页标题栏制作

    文章目录 前言 一.新浪标题栏实现效果 二.新浪标题栏实现需求分析 三.新浪标题栏实现方法 四.最终代码参考 总结 前言 复习CSS,让自己的项目做得更好:现在开始逐渐写一些以前写过的Demo案例,让 ...

  5. 新浪博客的视频如何下载

    新浪博客的视频如何下载 将新浪视频的播放网址年贴下面网址中的搜索栏,点击开始就能看到视频下载地址了.. http://www.flvcd.com/

  6. php模糊搜索接口,php通过新浪乐库搜索接口查询歌曲的功能

    本篇文章主要介绍php通过新浪乐库搜索接口查询歌曲的功能,感兴趣的朋友参考下,希望对大家有所帮助. 具体如下: header('meta http-equiv="content-type&q ...

  7. 清华出版计算机书籍相关资源全下载

    清华出版计算机书籍相关资源全下载 ●计算机组成原理-电子教案[作者:李文兵] ●Internet应用基础教程(电子教案) ●<数字电路与逻辑设计 电子教案> ●<操作系统实验指导-基 ...

  8. python爬取网店数据_Python爬虫实现抓取京东店铺信息及下载图片功能示例

    本文实例讲述了Python爬虫实现抓取京东店铺信息及下载图片功能.分享给大家供大家参考,具体如下: 这个是抓取信息的 from bs4 import BeautifulSoup import requ ...

  9. yershop商城系统开发(二)——新浪SAE配置

    thinkphp默认支持sae环境,sae相比服务器,不失为中小型网站首选. 资费估算:开启共享型mysql后,假设网站每天有600访问量,大概消耗新浪云豆在400颗左右(100云豆=1块钱).如果是 ...

  10. python爬取新浪博客_python网络爬虫 新浪博客篇

    上次写了一个爬世纪佳缘的爬虫之后,今天再接再厉又写了一个新浪博客的爬虫.写完之后,我想了一会儿,要不要在博客园里面写个帖子记录一下,因为我觉得这份代码的含金量确实太低,有点炒冷饭的嫌疑,就是把上次的代 ...

最新文章

  1. 在自己的网站添加关注新浪关注按钮
  2. css案例学习之全局声明*{} 与body{}的区别
  3. 【jQuery 区别】.click()和$(document).on(click,指定的元素,function(){});的区别
  4. boost::outcome模块comparison相关的测试程序
  5. Java黑皮书课后题第10章:**10.7(游戏:ATM机)使用编程练习题9.7中创建的Account类来模拟一台ATM级
  6. Redis03_基础命令操作
  7. hybris impex里的小括号语法
  8. vi/vim 三种模式及命令 (简单粗暴,轻松搞懂)
  9. java boolean例子_Java Field setBoolean()用法及代码示例
  10. arcgis运行慢_ArcGIS Pro运行较慢的诊断方法
  11. python 简易计算器
  12. 里费默之死的哲学解释
  13. Android 恢复出厂设置(recovery)
  14. 转载Flickr 网站架构分析
  15. 产品 · B端生意的定义和分类
  16. 大疆无人机飞控软件介绍
  17. Java 9 模块化(Modularity)
  18. 条码标签设计软件Nicelabel使用方法
  19. 爱润妍代理模式营销系统
  20. 【NOIP模拟】腐败

热门文章

  1. 【python初级】os.listdir返回目录中包含的文件以及文件夹的列表
  2. 砸金蛋html5小游戏设计总结
  3. 房屋租赁统一管理服务平台的研究与开发(JavaSSM)
  4. Linux 创建oracle数据库
  5. ubuntu取消代理
  6. java后台amr格式转mp3格式方法
  7. pytorch-tenor-细节
  8. MATLAB角度转换
  9. c语言仿qq截图源码,C#实现属于自己的QQ截图工具
  10. 小强统一认证中心-部署实例