「javadht爬虫」java爬虫登录网站
本篇文章给大家谈谈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爬虫的信息别忘了在本站进行查找喔。