utily.cpp
上传用户:st5609838
上传日期:2013-03-29
资源大小:66k
文件大小:5k
源码类别:

搜索引擎

开发平台:

Visual C++

  1. // Utily.cpp : implementation 
  2. //
  3. /****************************************************************
  4. Pre-emptive Multithreading Web Spider
  5. Copyright (c) 1998 by Sim Ayers.
  6. **************************************************************/
  7. #include "stdafx.h"
  8. #include "Spider.h"
  9. #include <string.h>
  10. #include "utily.h"
  11. BOOL FindHref(LPCTSTR lpszFind,LPCTSTR lpszString,CString& lpszResult,UINT nLen)
  12. {
  13. // start the search at nStart
  14. LPCTSTR lpsz = lpszFind;
  15. // single-byte string search
  16. UINT nCompare = nLen;
  17. int k=0;
  18. int nLenFind = lstrlen(lpszString);
  19. lpszResult ="";
  20. while (nCompare > 0)
  21. {
  22. LPSTR lpch = (LPSTR)(lpsz + nLenFind);
  23. char chSave = *lpch;
  24. *lpch = '';
  25. int nResult = lstrcmpi(lpsz, lpszString);
  26. *lpch = chSave;
  27. if (nResult == 0)
  28. {
  29. while(*lpsz != '')
  30. {
  31. if(*lpsz =='"')
  32. {
  33. lpsz++;
  34. k++;
  35. int j=0;
  36. while(*lpsz != '"')
  37. {
  38. lpszResult += lpszFind[k+j];
  39. lpsz++;
  40. j++;
  41. }
  42. return TRUE;
  43. }
  44. lpsz++;
  45. k++;
  46. }
  47. return TRUE;
  48. }
  49. // restore character at end of search
  50. *lpch = chSave;
  51. // move on to next substring
  52. nCompare--;
  53. lpsz ++;
  54. k++;
  55. }
  56. return FALSE;
  57. }
  58. BOOL GetHref(LPCSTR szBuffer,LPCSTR szfind, CStringList& list)
  59. {
  60. BOOL InTag=FALSE;
  61. CStringList RList;
  62. int i = 0,j=0;
  63. POSITION pos = NULL;
  64. int nLen = strlen(szBuffer);
  65. LPCTSTR lpsz = szBuffer;
  66. if( nLen <= 0) return FALSE;
  67. CString str,hString;
  68. str="";
  69. while (nLen)
  70. {
  71. if( *lpsz == '<') InTag=TRUE;
  72. if(InTag==TRUE) str += szBuffer[j];
  73. if( *lpsz == '>')  
  74. {
  75. RList.AddTail(str);
  76. str ="";
  77. InTag=FALSE;
  78. }
  79. ++lpsz;
  80. j++;
  81. nLen--;
  82. }
  83. int count = RList.GetCount();
  84. char* pdest;
  85. for(i=0; i<count; i++)
  86. {
  87. if( ( pos = RList.FindIndex( i)) != NULL )
  88. {
  89. str = RList.GetAt( pos );
  90. pdest = strstr( str, _T("NOINDEX")); //for robot exclusion
  91. if( pdest != NULL ) return FALSE;
  92. pdest = strstr( str, _T("noindex"));
  93. if( pdest != NULL ) return FALSE;
  94. if(FindHref((LPCTSTR) str,szfind,hString,str.GetLength()))
  95. {
  96. pdest = strstr( hString, _T("mailto:"));
  97. if( pdest == NULL ) list.AddTail(hString);
  98. }
  99. else
  100. {
  101. if(FindHref((LPCTSTR) str,_T("option"),hString,str.GetLength()))
  102. {
  103. pdest = strstr( hString, _T("http"));
  104. if( pdest != NULL ) list.AddTail(hString);
  105. }
  106. }
  107. }
  108. }
  109. count = list.GetCount();
  110. if(count>0) return TRUE;
  111. return FALSE;
  112. }
  113. BOOL GetEmail(LPCSTR szBuffer,LPCSTR szfind, CStringList& list)
  114. {
  115. BOOL InTag=FALSE;
  116. CStringList RList;
  117. int i = 0,j=0;
  118. POSITION pos = NULL;
  119. int nLen = strlen(szBuffer);
  120. LPCTSTR lpsz = szBuffer;
  121. if( nLen <= 0) return FALSE;
  122. CString str,hString;
  123. str="";
  124. while (nLen)
  125. {
  126. if( *lpsz == '<') InTag=TRUE;
  127. if(InTag==TRUE) str += szBuffer[j];
  128. if( *lpsz == '>')  
  129. {
  130. RList.AddTail(str);
  131. str ="";
  132. InTag=FALSE;
  133. }
  134. ++lpsz;
  135. j++;
  136. nLen--;
  137. }
  138. int count = RList.GetCount();
  139. char* pdest;
  140. int p;
  141. for(i=0; i<count; i++)
  142. {
  143. if( ( pos = RList.FindIndex( i)) != NULL )
  144. {
  145. str = RList.GetAt( pos );
  146. pdest = strstr( str, _T("NOINDEX")); //for robot exclusion
  147. if( pdest != NULL ) return FALSE;
  148. pdest = strstr( str, _T("noindex"));
  149. if( pdest != NULL ) return FALSE;
  150. if(FindHref((LPCTSTR) str,szfind,hString,str.GetLength()))
  151. {
  152. pdest = strstr( hString, _T("mailto:"));
  153. if( pdest != NULL )
  154. {
  155. p = hString.Find("mailto:");
  156. if(p >= 0)
  157. {
  158. str = hString.Mid(p+7);
  159. list.AddTail(str);
  160. }
  161. }
  162. }
  163. }
  164. }
  165. count = list.GetCount();
  166. if(count>0) return TRUE;
  167. return FALSE;
  168. }
  169. BOOL GetHTMLTags(LPCSTR szBuffer, CStringList& list)
  170. {
  171. BOOL InTag=FALSE;
  172. int j=0;
  173. int nLen = strlen(szBuffer);
  174. LPCTSTR lpsz = szBuffer;
  175. if( nLen <= 0) return FALSE;
  176. CString str;
  177. str="";
  178. while (nLen)
  179. {
  180. if( *lpsz == '<') InTag=TRUE;
  181. if(InTag==TRUE  ) str += szBuffer[j];
  182. if( *lpsz == '>')  
  183. {
  184. list.AddTail(str);
  185. str ="";
  186. InTag=FALSE;
  187. }
  188. ++lpsz;
  189. j++;
  190. nLen--;
  191. }
  192. int count = list.GetCount();
  193. if(count>0) return TRUE;
  194. return FALSE;
  195. }
  196. BOOL GetHTMLText(LPCSTR szBuffer, CStringList& list)
  197. {
  198. BOOL InTag=FALSE;
  199. int j=0;
  200. int nLen = strlen(szBuffer);
  201. LPCTSTR lpsz = szBuffer;
  202. if( nLen <= 0) return FALSE;
  203. CString str;
  204. str="";
  205. while (nLen)
  206. {
  207. if( *lpsz == '<') InTag=FALSE;
  208. if(InTag==TRUE  && *lpsz != '>') str += szBuffer[j];
  209. if( *lpsz == '>')  
  210. {
  211. list.AddTail(str);
  212. str ="";
  213. InTag=TRUE;
  214. }
  215. ++lpsz;
  216. j++;
  217. nLen--;
  218. }
  219. int count = list.GetCount();
  220. if(count>0) return TRUE;
  221. return FALSE;
  222. }