「javadht爬虫」java爬虫登录网站

博主:adminadmin 2023-03-18 16:35:08 587

本篇文章给大家谈谈javadht爬虫,以及java爬虫登录网站对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

dht爬虫 是什么东东?

就是搜索引擎爬取页面的意思,大家都叫它蜘蛛,每次爬取页面后iis日记都有记录,只有蜘蛛爬取了页面才有可能展示

Python好学吗?

记得刚学Python的时候,几乎所有人都说Python 简单易学,而对于编程零基础,只掌握Word和Excel的人来说,感觉真的好难。

学习之前网上的教材看了,Python的书也看了,包括《核心编程》,公开课也看了,包括莱斯大学和MIT的课。很多知识点,看的时候好像明白了,然后马上就忘,看了三四遍也记不住。

就算是多练习,多做题,很多题也是照着例题依样画葫芦就能做出来,改动一下就不明白了,感觉还是没有深入理解。

在网上看,到处都是自学几个月就很懂了然后找到满意工作的帖子,有没有人像我一样觉得很难呢?

有网友点评说:

Python语言本身是比较容易的,楼主说的难应该指programming本身。

不觉得非计算机专业出身就学不好编程,我就是学通信的,学Python全凭兴趣。平时用Python干各种脏活累活,数值计算、数据处理、复杂文本处理、数据库导入导出excel、网上抢票、Web数据抓取、消息推送、DHT网络爬虫、Kodi插件、Web自动化测试、网盘下载、云点播。甚至有次日记软件密码忘了,都是通过py+autoit暴力破解出来的。

我的win、debian、mac上面一般都会开一两个ipython,临时处理各类杂务。简单来说,Python现在就是我日常生活的一部分。我不是专业程序员,也没用Python做过什么大项目,只是每天享受Python带来的便捷与快乐。

楼主所说的不能深入理解,其实是不愿意花时间钻研。用了十几年Python,现在也要一直翻看官方文档和一些第三方module的文档,不断把遇到的问题弄懂弄透,学习不就是这个过程么?

我觉得楼主对Python无爱,对编程无爱,那就没必要强迫自己填鸭式“学习”了。

另外一个建议,练习时尽量不要copy后在现有demo基础上改,从头开始写起,遇到问题一个个查清,这样才能学到东西。

接收到这个小伙伴的答案,我内心开始反思,其实他说得都对的3个点是:

1.其实本身我对编程是不热爱的,只是因为需要;

2.其实本身我是对Python更上层可以用来做什么是不清楚的,思维还是在机械的完成一个Python习题;

3.其实我本身对编程的难度是小悄了的,Python简单是相对于C、Java等语言。

说到这里,不知道看到本文的小伙伴有几个有类似的心理映射,如果你是上面的状态,那你学习Python一定是难的。

下面我们来看看另外一位学习者的建议:

python是一门简单易学,容易理解,分分钟就可以掌握的语言,我也是学了大概一两个星期吧,就开始做项目了,嘻嘻!!!

这里有一个很严重的问题,,我在学python之前,做过3点的C#,一年的php和一年的java!

所以呢,我想说的是,如果你对编程不那么敏感,就需要时间来弥补了,那些什么书啊,公开课啊,我觉得都是辅助的,你要是不经历几个项目,怎么知道python为什么容易学,怎么知道python好理解,怎么知道python有哪些超级好用的框架,比如django,tonado之类的。

所以呀,编程没有捷径,你甭想通过看。。。就学会,写起来才是最重要的!

最终通过对学习Python这件事,我总结了几点关于学习Python的建议,希望跟大家一起分享:

1.编程语言是一回事,但更重要的是编程思想,不要把应试教育的思想带到这里面来,并不是所有的知识都能靠“五年高考三年模拟”来掌握;

2.自己找个想用程序解决的任务,然后自己边学边完成。

3.没有编程基础的人新学一门语言一定一定要有耐心,基础知识没有半年以上的学习和练习是很难彻底掌握的,千万不要图快,学的太快或许会有一时的成就感,但基础知识不扎实终将会成为你前进道路上的瓶颈,不仅学新的知识一知半解,工作时也会磕磕绊绊。

4.没有计算机基础,不管学什么语言都会有点吃力的,python语法比较简单的。

5.现在要做的就是把错误犯下100遍,那你就拿下这个Get了!

Python写的dht爬虫,其中的一段代码看不懂

python中没有三目运算,但是有点类似三目运算:

result if True / False else fresult if为真时候结果为result,为假的时候结果为fresult

例子:

result = 'test' if True else 'not test' # result = 'test'

result = 'test' if False else 'not test' # result = 'not test'

如何用c++写一个dht爬虫

要想爬,先读取HTTP

读取后 进行字符串分割 

Http访问有两种方式,GET和POST,就编程来说GET方式相对简单点,它不用向服务器提交数据,程序中使用POST方式,

提交数据并从服务器获取返回值。

为实现Http访问,微软提供了二套API:WinINet, WinHTTP。WinHTTP比WinINet更加安全和健壮,可以这么认为WinHTTP是WinINet的升级版本。

程序中,通过一个宏的设置来决定是使用WinHttp还是WinINet。

#define USE_WINHTTP      //Comment this line to user wininet.

下面来说说实现Http访问的流程(两套API都一样的流程):

1, 首先我们打开一个Session获得一个HINTERNET session句柄;

2, 然后我们使用这个session句柄与服务器连接得到一个HINTERNET connect句柄;

3, 然后我们使用这个connect句柄来打开Http 请求得到一个HINTERNET request句柄;

4, 这时我们就可以使用这个request句柄来发送数据与读取从服务器返回的数据;

5, 最后依次关闭request,connect,session句柄。

 

/***********************定义HTTP发送所用方法***********************************/

HINTERNET OpenSession(LPCWSTR userAgent = 0)

{

#ifdef USE_WINHTTP

    return WinHttpOpen(userAgent, NULL, NULL, NULL, NULL);;

#else

    return InternetOpen(userAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);

#endif

}

HINTERNET Connect(HINTERNET hSession, LPCWSTR serverAddr, int portNo)

{

#ifdef USE_WINHTTP

    return WinHttpConnect(hSession, serverAddr, (INTERNET_PORT) portNo, 0);

#else

    return InternetConnect(hSession, serverAddr, portNo, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);

#endif

}

HINTERNET OpenRequest(HINTERNET hConnect, LPCWSTR verb, LPCWSTR objectName, int scheme)

{

    DWORD flags = 0;

#ifdef USE_WINHTTP

    if (scheme == INTERNET_SCHEME_HTTPS) {

        flags |= WINHTTP_FLAG_SECURE;

    }

    return WinHttpOpenRequest(hConnect, verb, objectName, NULL, NULL, NULL, flags);

#else

    if (scheme == INTERNET_SCHEME_HTTPS) {

        flags |= INTERNET_FLAG_SECURE;

    }

    return HttpOpenRequest(hConnect, verb, objectName, NULL, NULL, NULL, flags, 0);

#endif

}

BOOL AddRequestHeaders(HINTERNET hRequest, LPCWSTR header)

{

    SIZE_T len = lstrlenW(header);

#ifdef USE_WINHTTP

    return WinHttpAddRequestHeaders(hRequest, header, DWORD(len), WINHTTP_ADDREQ_FLAG_ADD);

#else

    return HttpAddRequestHeaders(hRequest, header, DWORD(len), HTTP_ADDREQ_FLAG_ADD);

#endif

}

BOOL SendRequest(HINTERNET hRequest, const void* body, DWORD size)

{

#ifdef USE_WINHTTP

    return WinHttpSendRequest(hRequest, 0, 0, const_castvoid*(body), size, size, 0);

#else

    return HttpSendRequest(hRequest, 0, 0, const_castvoid*(body), size);

#endif

}

BOOL EndRequest(HINTERNET hRequest)

{

#ifdef USE_WINHTTP

    return WinHttpReceiveResponse(hRequest, 0);

#else

    // if you use HttpSendRequestEx to send request then use HttpEndRequest in here!

    return TRUE;

#endif

}

BOOL QueryInfo(HINTERNET hRequest, int queryId, char* szBuf, DWORD* pdwSize)

{

#ifdef USE_WINHTTP

    return WinHttpQueryHeaders(hRequest, (DWORD) queryId, 0, szBuf, pdwSize, 0);

#else

    return HttpQueryInfo(hRequest, queryId, szBuf, pdwSize, 0);

#endif

}

BOOL ReadData(HINTERNET hRequest, void* buffer, DWORD length, DWORD* cbRead)

{

#ifdef USE_WINHTTP

    return WinHttpReadData(hRequest, buffer, length, cbRead);

#else

    return InternetReadFile(hRequest, buffer, length, cbRead);

#endif

}

void CloseInternetHandle(HINTERNET hInternet)

{

    if (hInternet)

{

#ifdef USE_WINHTTP

        WinHttpCloseHandle(hInternet);

#else

        InternetCloseHandle(hInternet);

#endif

    }

}

/**********************************************************/

///通过Http方式发送短信

string SendSMS_HTTP(const long ececcid,const string  password ,const string  msisdn, const string smsContent)

{

 string rtnStr ="-1";

    HINTERNET hSession = 0;

    HINTERNET hConnect = 0;

    HINTERNET hRequest = 0;

    wstring strHeader(L"Content-type: application/x-www-form-urlencoded\r\n");

    // Test data

    CrackedUrl crackedUrl(L"");

 string StrPostData = "ececcid=600000password="+password+"msisdn="+msisdn+"smscontent="+smsContent+"msgtype=5longcode=";

 

 StrPostData = string_To_UTF8(StrPostData);

    // Open session.

    hSession = OpenSession(L"HttpPost by lyz_sea@163.com");

    if (hSession == NULL) {

        cout"Error:Open session!\n";

        return "-1";

    }

    // Connect.

    hConnect = Connect(hSession, crackedUrl.GetHostName(), crackedUrl.GetPort());

    if (hConnect == NULL) {

        cout"Error:Connect failed!\n";

        return "-1";

    }

    // Open request.

    hRequest = OpenRequest(hConnect, L"POST", crackedUrl.GetPath(), crackedUrl.GetScheme());

    if (hRequest == NULL) {

        cout"Error:OpenRequest failed!\n";

        return "-1";

   }

    // Add request header.

 if (!AddRequestHeaders(hRequest, strHeader.c_str())) {

        cout"Error:AddRequestHeaders failed!\n";

        return "-1";

    }

    // Send post data.

 if (!SendRequest(hRequest, StrPostData.c_str(), StrPostData.length())) {

        cout"Error:SendRequest failed!\n";

        return "-1";

    }

    // End request

    if (!EndRequest(hRequest)) {

        cout"Error:EndRequest failed!\n";

        return "-1";

    }

    char szBuf[BUF_SIZE];

    DWORD dwSize = 0;

    szBuf[0] = 0;

    // Query header info.

#ifdef USE_WINHTTP

    int contextLengthId = WINHTTP_QUERY_CONTENT_LENGTH;

    int statusCodeId = WINHTTP_QUERY_STATUS_CODE;

    int statusTextId = WINHTTP_QUERY_STATUS_TEXT;

#else

    int contextLengthId = HTTP_QUERY_CONTENT_LENGTH;

    int statusCodeId = HTTP_QUERY_STATUS_CODE;

    int statusTextId = HTTP_QUERY_STATUS_TEXT;

#endif

    dwSize = BUF_SIZE;

    if (QueryInfo(hRequest, contextLengthId, szBuf, dwSize)) {

        szBuf[dwSize] = 0;

        cout"Content length: "szBufendl;

    }

    dwSize = BUF_SIZE;

    if (QueryInfo(hRequest, statusCodeId, szBuf, dwSize)) {

        szBuf[dwSize] = 0;

        cout"Status code: " szBufendl;

    }

    dwSize = BUF_SIZE;

    if (QueryInfo(hRequest, statusTextId, szBuf, dwSize)) {

        szBuf[dwSize] = 0;

        cout"Status text:"szBufendl;

    }

    // read data.

    for (;;) {

        dwSize = BUF_SIZE;

        if (ReadData(hRequest, szBuf, dwSize, dwSize) == FALSE) {

           break;

        }

        if (dwSize = 0) {

            break;

        }

        szBuf[dwSize] = 0;

        

  rtnStr =::UTF8_To_string(string(szBuf));

  coutrtnStrendl;//Output 返回值

   

    }

    CloseInternetHandle(hRequest);

    CloseInternetHandle(hConnect);

    CloseInternetHandle(hSession);

 return  rtnStr;

}

 

 

以上方法中用到的CrackURL方法在以下CrackURL.h文件中:

#pragma once

//#includeiostream

//using namespace std;

#define USE_WINHTTP    //Comment this line to user wininet.

 #ifdef USE_WINHTTP

     #include winhttp.h

     #pragma comment(lib, "winhttp.lib")

 #else

     #include wininet.h

     #pragma comment(lib, "wininet.lib")

 #endif

 // CrackedUrl

 class CrackedUrl {

     int m_scheme;

     wstring m_host;

     int m_port;

     wstring m_path;

 public:

     CrackedUrl(LPCWSTR url)

     {

         URL_COMPONENTS uc = { 0};

         uc.dwStructSize = sizeof(uc);

 

         const DWORD BUF_LEN = 256;

 

         WCHAR host[BUF_LEN];

         uc.lpszHostName = host;

         uc.dwHostNameLength = BUF_LEN;

 

         WCHAR path[BUF_LEN];

         uc.lpszUrlPath = path;

         uc.dwUrlPathLength = BUF_LEN;

 

         WCHAR extra[BUF_LEN];

         uc.lpszExtraInfo = extra;

         uc.dwExtraInfoLength = BUF_LEN;

 

 #ifdef USE_WINHTTP

         if (!WinHttpCrackUrl(url, 0, ICU_ESCAPE, uc)) {

             cout"Error:WinHttpCrackUrl failed!\n";

         }

 

 #else

         if (!InternetCrackUrl(url, 0, ICU_ESCAPE, uc)) {

             printf("Error:InternetCrackUrl failed!\n");

         }

 #endif

         m_scheme = uc.nScheme;

         m_host = host;

         m_port = uc.nPort;

         m_path = path;

     }

 

     int GetScheme() const

     {

         return m_scheme;

     }

 

     LPCWSTR GetHostName() const

     {

   return m_host.c_str();

    }

    int GetPort() const

     {

         return m_port;

     }

 

     LPCWSTR GetPath() const

     {

   return m_path.c_str();

     }

 

     static string UrlEncode(const char* p)

     {

         if (p == 0) {

             return string();

         }

 

         string buf;

 

        for (;;) {

             int ch = (BYTE) (*(p++));

             if (ch == '\0') {

                 break;

             }

 

             if (isalnum(ch) || ch == '_' || ch == '-' || ch == '.') {

                 buf += (char)ch;

            }

            else if (ch == ' ') {

                buf += '+';

            }

            else {

                char c[16];

                wsprintfA(c, "%%%02X", ch);

                buf += c;

            }

        }

        return buf;

    }

};

javadht爬虫的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java爬虫登录网站、javadht爬虫的信息别忘了在本站进行查找喔。