吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4845|回复: 27
收起左侧

[C&C++ 转载] C语言写的小说抓取

  [复制链接]
seeyou_shj 发表于 2019-12-25 08:43
很久之前写的,懒得整理了。有兴趣的可以看一看。

附上源码。

#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[1025];
string sStr,sStr1,NextPage,HomePage;
TCHAR path[MAX_PATH];
DWORD num;
int i,j,j1;


//打开
HINTERNET  hinet = 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[num] = '\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;
}

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

免费评分

参与人数 14吾爱币 +10 热心值 +11 收起 理由
LITTLETHING + 1 热心回复!
距离QAQ + 1 + 1 谢谢@Thanks!
xiaohe_nh + 1 这个厉害
Kendley + 1 我很赞同!
1998+ + 1 我很赞同!
亦已焉哉 + 1 我很赞同!
一条鱼呀 + 1 我很赞同!
pojielajiruanji + 1 + 1 谢谢@Thanks!
kangwenzhang + 1 + 1 谢谢@Thanks!
intel286 + 1 + 1 我很赞同!
sitiger + 1 谢谢@Thanks!
dazhuangzhuang + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
枫吟叶 + 1 + 1 用心讨论,共获提升!
龍謹 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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

现在我的能力不够啊!暂时看不懂?
以后等我学完C了,再来学习学习吧!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-5 15:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表