日本少妇高潮久久久久久_东京热一区二区三区无码视频_国内精品人妻久久毛片app_男人撕开奶罩揉吮奶头视频_少妇交换做爰做到高潮_睡错了人妻公h_国产男女猛烈无遮挡a片漫画_男女啪啪做爰高潮全过有多钱_国产猛男猛女超爽免费视频

Categories


Tags


搶先式多線程網(wǎng)絡(luò)蜘蛛

Win32 API 支持搶先式多線程網(wǎng)絡(luò),這是編寫MFC網(wǎng)絡(luò)蜘蛛非常有用的地方。SPIDER工程(程序)是一個如何用搶先式多線程技術(shù)實現(xiàn)在網(wǎng)上用網(wǎng)絡(luò)蜘蛛/機器人聚集信息的程序。

該工程產(chǎn)生一個象蜘蛛一樣行動的程序,該程序為斷開的URL鏈接檢查WEB站點。鏈接驗證僅在href指定的鏈接上進行。它在一列表視圖CListView中顯示不斷更新的URL列表,以反映超鏈接的狀態(tài)。本工程能用作收集、索引信息的模板,該模板將這些信息存入到可以用于查詢的數(shù)據(jù)庫文件中。

搜索引擎在WEB上使用叫作Robots(也叫爬蟲,蜘蛛,蠕蟲,漫步者,滑行者等等)的程序收集信息,它從WEB上自動地聚集和索引信息,接著將這些信息存入數(shù)據(jù)庫。(注意:一個機器人將搜索一個頁面,然后把這個頁面上的鏈接作為將要索引的新的URL的起點)用戶可創(chuàng)建查詢?nèi)ゲ樵冞@些數(shù)據(jù)庫以發(fā)現(xiàn)他們需要的信息。

通過搶先式多線程地使用,你能索引一個基于URL鏈接的WEB頁面,啟動一個新的線程跟隨每個新的URL鏈接,索引一個新的URL起點。本工程使用和自定義的MDI子框架一起使用的MDI 文檔類,在下載WEB頁面時顯示一個編輯視圖,在檢查URL連接時顯示一個列表視圖。另外,本工程使用了CObArray,CInternetSession,CHttpConnection,ChttpFile和CWinThread MFC類。CWinThread類用于產(chǎn)生多線程來代替在CInternetSession類中的異步模式,這種模式是從insock的16位windows平臺保留下來的。SPIDER工程使用簡單的工作線程去檢查URL鏈接,或者下載一個Web頁面。CSpiderThread類是從CWinThread類中派生的,所以,每個CSpiderThread對象可以使用CWinThread 的MESSAGE_MAP()函數(shù)。通過在CSpiderThread類中聲明"DECLARE_MESSAGE_MAP()",用戶接口可以響應(yīng)用戶的輸入。這意味著你可以在一個Web服務(wù)器上檢查URL鏈接的同時,你可以從另一個Web服務(wù)器上下載或打開一個Web頁面。只有在線程數(shù)超過定義為64的MAXIMUM_WAIT_OBJECTS時,用戶接口將不會響應(yīng)用戶的輸入。在每個CSpiderThread對象的構(gòu)造函數(shù)中,我們提供了ThreadProc函數(shù)以及將傳送到ThreadProc函數(shù)的線程參數(shù)。

CSpiderThread* pThread;

pThread = NULL;

pThread = new CSpiderThread(CSpiderThread::ThreadFunc,pThreadParams); // 創(chuàng)建一個新的 CSpiderThread 對象;

在類CSpiderThread 構(gòu)造函數(shù)中我們在線程參數(shù)中設(shè)置指針CWinThread* m_pThread ,于是我們可以指向這個線程正確的事例:

pThreadParams->m_pThread = this;

The CSpiderThread ThreadProc Function

// 簡單的工作線程函數(shù)

UINT CSpiderThread::ThreadFunc(LPVOID pParam)

{

ThreadParams * lpThreadParams = (ThreadParams*) pParam;

CSpiderThread* lpThread = (CSpiderThread*) lpThreadParams->m_pThread;

lpThread->ThreadRun(lpThreadParams);

// 這里使用SendMessage代替PostMessageUse,以保持當前線程數(shù)同步。

// 如果線程數(shù)大于 MAXIMUM_WAIT_OBJECTS (64), 本程序?qū)⒆兊貌荒茼憫?yīng)用戶輸入

::SendMessage(lpThreadParams->m_hwndNotifyProgress,

WM_USER_THREAD_DONE, 0, (LPARAM)lpThreadParams);

// 刪除lpThreadParams 和減少線程總數(shù)

return 0;

}

這個結(jié)構(gòu)傳遞給CSpiderThread ThreadProc函數(shù)

typedef struct tagThreadParams

{

HWND m_hwndNotifyProgress;

HWND m_hwndNotifyView;

CWinThread* m_pThread;

CString m_pszURL;

CString m_Contents;

CString m_strServerName;

CString m_strObject;

CString m_checkURLName;

CString m_string;

DWORD m_dwServiceType;

DWORD m_threadID;

DWORD m_Status;

URLStatus m_pStatus;

INTERNET_PORT m_nPort;

int m_type;

BOOL m_RootLinks;

}ThreadParams;

CSpiderThread對象創(chuàng)建后,我們用CreatThread函數(shù)開始一個新的線程對象地執(zhí)行。

if (!pThread->CreateThread()) //開始一 CWinThread 對象地執(zhí)行

{

AfxMessageBox("Cannot Start New Thread");

delete pThread;

pThread = NULL;

delete pThreadParams;

return FALSE;

}

一旦新的線程正在運行,我們使用::SengMessage函數(shù)發(fā)送消息到 CDocument's-> CListView ,這個消息帶有URL鏈接的狀態(tài)結(jié)構(gòu)。

if(pThreadParams->m_hwndNotifyView != NULL)

::SendMessage(pThreadParams->m_hwndNotifyView,WM_USER_CHECK_DONE, 0, (LPARAM) &pThreadParams->m_pStatus);

URL狀態(tài)的結(jié)構(gòu):

typedef struct tagURLStatus

{

CString m_URL;

CString m_URLPage;

CString m_StatusString;

CString m_LastModified;

CString m_ContentType;

CString m_ContentLength;

DWORD m_Status;

}URLStatus, * PURLStatus;

每個新的線程建立一個新的CMyInternetSession類(派生于CInternetSession)對象,并把 EnableStatusCallback設(shè)置為TRUE,于是,我們可以在所有的InternetSession回調(diào)時檢查狀態(tài)。將回調(diào)使用的dwContext ID設(shè)置為線程ID。

BOOL CInetThread::InitServer()

{

try

{

m_pSession = new CMyInternetSession(AgentName,m_nThreadID);

int ntimeOut = 30; // 很重要!如果設(shè)置太小回引起服務(wù)器超時,如果設(shè)置太大則回引起線程掛起。

/*

網(wǎng)絡(luò)連接請求時間超時值在數(shù)毫秒級。如果連接請求時間超過這個超時值,請求將被取消。

缺省的超時值是無限的。

*/

m_pSession->SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,1000* ntimeOut);

/* 在重試連接之間的等待的延時值在毫秒級。*/

m_pSession->SetOption(INTERNET_OPTION_CONNECT_BACKOFF,1000);

/* 在網(wǎng)絡(luò)連接請求時的重試次數(shù)。如果一個連接企圖在指定的重試次數(shù)后仍失敗,則請求被取消。 缺省值為5。 */

m_pSession->SetOption(INTERNET_OPTION_CONNECT_RETRIES,1);

m_pSession->EnableStatusCallback(TRUE);

}

catch (CInternetException* pEx)

{

// catch errors from WinINet

//pEx->ReportError();

m_pSession = NULL;

pEx->Delete();

return FALSE ;

}

return TRUE;

}

在一個單或多線程程序中使用MFC WinIne類,關(guān)鍵是要在所有MFC WinInet類函數(shù)周圍使用try和catch塊。因為互連網(wǎng)有時很不穩(wěn)定,或者你訪問的Web頁面已不存在,則這種情況下,將拋出一個CInternetException錯誤。

try

{

// some MFC WinInet class function

}

catch (CInternetException* pEx)

{

// catch errors from WinINet

//pEx->ReportError();

pEx->Delete();

return FALSE ;

}

最初線程數(shù)最大設(shè)置為64,你可以將它設(shè)置為從1到100的任何數(shù)。設(shè)置太高會使鏈接失敗,意味著你將不得不重新檢查URL鏈接。在/cgi-bin/目錄下一個連續(xù)不斷地迅猛地HTTP請求會使服務(wù)器崩潰。SPIDER 程序在1秒中發(fā)送四個HTTP請求,1分鐘240個。這也將會使服務(wù)器崩潰。在任何服務(wù)器上你檢查時放仔細一點。每個服務(wù)器都有一個請求Web文件的請求代理IP地址的日志。你或許會收到來自Web服務(wù)器管理員的齷齪的郵件。

你可以為一些目錄建立robots.txt 文件來防止這些目錄被索引。這個機制通常用于保護/cgi-bin/ 目錄。CGI腳本占用更多的要檢索的服務(wù)器資源。當SPIDER程序檢查URL鏈接時,它的目標是不太快地請求太多的文檔。SPIDER程序堅持機器人拒絕的標準。這個標準是機器人開發(fā)者之間的協(xié)議,允許WWW站點限制URL上的機器人的請求。通過使用這個限制訪問的標準,機器人將不檢索Web服務(wù)器希望拒絕的任何文檔。在檢查根URL前,程序檢查看是否有robots.txt文件在主目錄下。如果SPIDER程序發(fā)現(xiàn)robots.txt文件,將放棄搜索。另外,程序也檢查所有Web頁面中的META標記。如果發(fā)現(xiàn)一個META標記,它的NAME="ROBOTS" CONTENT ="NOINDEX,NOFOLLOW",則不索引那個頁面上的URL。

創(chuàng)建:

Windows 95

MFC/VC++ 5.0

WinInet.h 時間 9/25/97

WinInet.lib 時間 9/16/97

WinInet.dll 時間 9/18/97

來源:月光博客


Public @ 2022-07-19 16:22:28

遇Baiduspider抓取,反饋時間多久合適

進入移動時代,同學(xué)們肯定會發(fā)現(xiàn),百度官方和各知名SEO大拿們都在不斷強調(diào)一個詞:速度!最重要的莫過于,從用戶點擊搜索結(jié)果到頁面完全加載完畢,不可超過3秒,否則有可能被限制展現(xiàn)(因為百度做過測試,當頁面在3秒以上還無法打開的話,用戶會選擇關(guān)閉該網(wǎng)頁)。于是大家各種針對速度的問題也多了起來,在深圳VIP大講堂中,我們看到了這樣一個簡單的對話:同學(xué)問:站點遇到百度蜘蛛抓取,應(yīng)該在多長時間內(nèi)給出反饋?時間

Public @ 2015-11-08 15:38:40

如何和搜索引擎爬蟲對話

抓取策略:那些網(wǎng)頁是我們需要去下載的,那些是無需下載的,那些網(wǎng)頁是我們優(yōu)先下載的,定義清楚之后,能節(jié)省很多無謂的爬取。更新策略:監(jiān)控列表頁來發(fā)現(xiàn)新的頁面;定期check 頁面是否過期等等。抽取策略:我們應(yīng)該如何的從網(wǎng)頁中抽取我們想要的內(nèi)容,不僅僅包含最終的目標內(nèi)容,還有下一步要抓取的url.抓取頻率:我們需要合理的去下載一個網(wǎng)站,卻又不失效率。讓我對“如何和爬蟲對話 ”這個課題有了一些思考,下面歸

Public @ 2017-01-01 16:22:28

Google爬行緩存代理(crawl caching proxy)

Google爬行緩存代理是Google搜索引擎通過代理服務(wù)器對網(wǎng)站進行爬行并緩存網(wǎng)頁內(nèi)容的一種技術(shù)。該技術(shù)可提高網(wǎng)站的訪問速度和穩(wěn)定性,同時也有利于搜索引擎的優(yōu)化。 當用戶訪問一個網(wǎng)站時,Google爬行緩存代理會首先檢查其緩存中是否有該網(wǎng)站的內(nèi)容,如果有,則將緩存中的內(nèi)容返回給用戶;如果沒有,則該代理服務(wù)器會向該網(wǎng)站服務(wù)器發(fā)送請求,并將獲取到的內(nèi)容緩存起來,以備將來的訪問。 Google爬行

Public @ 2023-06-08 01:50:10

如何查看網(wǎng)站被百度抓取的情況?

百度用于抓取網(wǎng)頁的程序叫做Baiduspider - 百度蜘蛛,我們查看網(wǎng)站被百度抓取的情況主要是分析,網(wǎng)站日志里百度蜘蛛Baiduspider的活躍性:抓取頻率,返回的HTTP狀態(tài)碼。如何查看網(wǎng)站被百度抓取的情況?查看日志的方式:通過FTP,在網(wǎng)站根目錄找到一個日志文件,文件名一般包含log,下載解壓里面的記事本,這即是網(wǎng)站的日志,記錄了網(wǎng)站被訪問和操作的情況。因為各個服務(wù)器和主機的情況不同,不

Public @ 2022-04-18 16:22:33

更多您感興趣的搜索

0.483719s