二、爬虫 - 新浪爱问共享资源全下载之功能实现
序
其实有了爬取的解决方案,用什么语言实现都是可以的,针对这个网站资源特性,根本就不用下载网页,解析网页也就免了,数据的保存也省了,就直接的发送请求,响应请求,之后对链接进行处理(有可能对链接进行url编码解码)就行了,最后就是下载了,至于下载这一环节,可以采用多线程单线程都可以,因为资源普遍在0~20m左右,多线程显得有点浪费,我这里就采用单线程了。
程序设计
部分核心代码(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("线程结束"));}
}
注明
二、爬虫 - 新浪爱问共享资源全下载之功能实现相关推荐
- 今天修改了个仿新浪爱问的知识人系统,真累,部署真麻烦。
网站的名字叫:我问你答网 网址是:http://www5tiwen.com 希望能很好的被百度和GOOGle收录.不然就没有意思了!
- 新浪爱问免积分下载---
打开chrome 进入一个下载页面 鼠标移动到立即下载 图片 可以看到 下载接口是 downishare('xxx') xxx是所需要的积分, 因此在javascript控制台输入 downishar ...
- 新浪爱彩票DBA总监:为什么你的MySQL跑得很慢?
其实这是一个老问题了: 为什么会觉得数据库比较慢呢? 再换种问法: 数据库优化要从哪些方面入手? 1第一点,硬件太老 硬件我们这里主要从CPU.内存.磁盘三个方面来说下,还有一些因素比如网卡,机房网络 ...
- 前端案例二:新浪首页标题栏制作
文章目录 前言 一.新浪标题栏实现效果 二.新浪标题栏实现需求分析 三.新浪标题栏实现方法 四.最终代码参考 总结 前言 复习CSS,让自己的项目做得更好:现在开始逐渐写一些以前写过的Demo案例,让 ...
- 新浪博客的视频如何下载
新浪博客的视频如何下载 将新浪视频的播放网址年贴下面网址中的搜索栏,点击开始就能看到视频下载地址了.. http://www.flvcd.com/
- php模糊搜索接口,php通过新浪乐库搜索接口查询歌曲的功能
本篇文章主要介绍php通过新浪乐库搜索接口查询歌曲的功能,感兴趣的朋友参考下,希望对大家有所帮助. 具体如下: header('meta http-equiv="content-type&q ...
- 清华出版计算机书籍相关资源全下载
清华出版计算机书籍相关资源全下载 ●计算机组成原理-电子教案[作者:李文兵] ●Internet应用基础教程(电子教案) ●<数字电路与逻辑设计 电子教案> ●<操作系统实验指导-基 ...
- python爬取网店数据_Python爬虫实现抓取京东店铺信息及下载图片功能示例
本文实例讲述了Python爬虫实现抓取京东店铺信息及下载图片功能.分享给大家供大家参考,具体如下: 这个是抓取信息的 from bs4 import BeautifulSoup import requ ...
- yershop商城系统开发(二)——新浪SAE配置
thinkphp默认支持sae环境,sae相比服务器,不失为中小型网站首选. 资费估算:开启共享型mysql后,假设网站每天有600访问量,大概消耗新浪云豆在400颗左右(100云豆=1块钱).如果是 ...
- python爬取新浪博客_python网络爬虫 新浪博客篇
上次写了一个爬世纪佳缘的爬虫之后,今天再接再厉又写了一个新浪博客的爬虫.写完之后,我想了一会儿,要不要在博客园里面写个帖子记录一下,因为我觉得这份代码的含金量确实太低,有点炒冷饭的嫌疑,就是把上次的代 ...
最新文章
- 在自己的网站添加关注新浪关注按钮
- css案例学习之全局声明*{} 与body{}的区别
- 【jQuery 区别】.click()和$(document).on(click,指定的元素,function(){});的区别
- boost::outcome模块comparison相关的测试程序
- Java黑皮书课后题第10章:**10.7(游戏:ATM机)使用编程练习题9.7中创建的Account类来模拟一台ATM级
- Redis03_基础命令操作
- hybris impex里的小括号语法
- vi/vim 三种模式及命令 (简单粗暴,轻松搞懂)
- java boolean例子_Java Field setBoolean()用法及代码示例
- arcgis运行慢_ArcGIS Pro运行较慢的诊断方法
- python 简易计算器
- 里费默之死的哲学解释
- Android 恢复出厂设置(recovery)
- 转载Flickr 网站架构分析
- 产品 · B端生意的定义和分类
- 大疆无人机飞控软件介绍
- Java 9 模块化(Modularity)
- 条码标签设计软件Nicelabel使用方法
- 爱润妍代理模式营销系统
- 【NOIP模拟】腐败