seeyou_shj 发表于 2019-12-25 08:43

C语言写的小说抓取

很久之前写的,懒得整理了。有兴趣的可以看一看。

附上源码。

#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <wininet.h>
#include <iostream>
#include <string.h>
#include <ctime>
//加入连接库
#pragma comment(lib, "wininet.lib")

using namespace std;
void mySleep(int msecond)
{
    clock_t s;
    s = clock();
    while(clock() - s < msecond);
}

int main(int argc, char* argv[])
{
TCHAR buf;
string sStr,sStr1,NextPage,HomePage;
TCHAR path;
DWORD num;
int i,j,j1;


//打开
HINTERNEThinet = InternetOpen(_TEXT("Microsoft Internet Explorer"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, INTERNET_INVALID_PORT_NUMBER);

// GetTempPath(MAX_PATH, path);
// strcat(path, "/t.txt");

//获取文件句柄
HomePage = "https://www.qu.la/book/8909/";
NextPage = HomePage + "3607170.html";                //name

BEGIN:
HINTERNET hurl = InternetOpenUrl(hinet, NextPage.c_str(), NULL, 0, INTERNET_FLAG_NO_CACHE_WRITE, 0);

// FILE* i = fopen(path, "wb");

//从internet下载文件内容
sStr = "";
ZeroMemory(buf, 1025);

while(TRUE == InternetReadFile(hurl, buf, 1024, &num) && num>0)
{
//fwrite(buf, 1, num, i);
//                cout << buf << endl;
//                sStr1 = buf;
//                sStr = sStr + sStr1;
                        buf = '\0';
                        sStr = sStr + buf;
//                cout << "" << endl;
}
// fclose(i);
//        cout << sStr << endl << "====================================" << endl;

//使用完毕文件句柄和关闭连接
InternetCloseHandle(hurl);
//获取下一页地址
        i = sStr.find(_T("下一章"));
        i = sStr.rfind("href=",i);
        i = i + 6;
        j = sStr.find("\"",i+2);
        NextPage = sStr.substr(i,j-i);
//        cout << endl << "Next Page Addr:" << NextPage << endl << endl;
//        cout << endl << "下一页地址:" << sizeof(NextPage) << endl << endl;
//获取章节名称<title>

        i = sStr.find("bookname");
        i = sStr.find("<h1>",i);
        i = i + 4;
        j = sStr.find("</h1>",i+2);

        cout << sStr.substr(i,j-i) << endl ;

//获取本页内容
        i = sStr.find("id=\"content");
        i = sStr.find(">",i);
        i = i + 1;
        j = sStr.find("</div>",i);
        j = j - i;
               
        if(NextPage.length()<15)
        {
                NextPage = HomePage + NextPage;
                cout << sStr.substr(i,j) << endl;
                mySleep(1000);
                goto BEGIN;
        }
        cout << sStr.substr(i,j) << endl;

InternetCloseHandle(hinet);

End1:
return 0;
}

如果您觉得有用,给点免费的热心值呗 :lol

intel286 发表于 2020-1-2 06:52

这么简单呀

seeyou_shj 发表于 2020-2-19 09:47

醉情的大叔 发表于 2020-2-17 09:24
感谢回复,但是我还是没有成功,看这些报错感觉我的VS确实少了点什么东西,还在学习,所以有点晕

关于字符串连接,可以参看:https://blog.csdn.net/liuweiyuxiang/article/details/83687452

关于类型转换,可以直接在前面加上(LPCWSTR)就可以。注意括弧。

我写的这个现在看起来漏洞百出,的确算不上什么程序。以后有时间再去完善。现在学习网络方面的编程,也是把以前的服务器\客户端通讯程序拿出来重新复习一下。时间太久不做程序了,很多东西都忘光了。一点点拾起来吧。

欢迎交流。回头我尝试着录个c++网络编程的视频试试看。

龍謹 发表于 2019-12-25 08:45

沙发,热心值已奉上。

逆天昊龙 发表于 2019-12-25 08:49

这需要学到什么吃程度才能写出来

enyan0724 发表于 2019-12-25 08:58

谢谢分享

枫吟叶 发表于 2019-12-25 09:05

沉迷学习,无法自拔

叶樱枫 发表于 2019-12-25 09:24

大佬,666666

sitiger 发表于 2019-12-25 09:47

第一次见到有人用C写爬虫!!

826049371 发表于 2020-1-1 17:07

速度怎么样?

18230642422 发表于 2020-2-9 13:07

intel286 发表于 2020-1-2 06:52
这么简单呀

现在我的能力不够啊!暂时看不懂?
以后等我学完C了,再来学习学习吧!
页: [1] 2 3
查看完整版本: C语言写的小说抓取