记一次爬虫实战

记一次爬虫实战

记一次爬虫实战,以爬取我最近在看的小说《不可名状的日记簿》为例。

先找到一个合适的网站https://www.qbtxt.co/93_93964/

image

用的是https协议,socket什么的太麻烦了,直接用python的requests库。

写一个封装好的python程序,作用是爬取request.txt中网址的内容到response.txt。

import requests
fin=open("request.txt","r")
fout=open("response.txt","w",encoding="utf-8")
url=fin.read()
fout.write(requests.get(url,verify=False).text)
fin.close()
fout.close()

先爬取目录到index.txt,观察格式,显然是<dd><a href="网址.html">标题</a></dd>,写一个解析章节网址的程序。

FILE *fout;
char dex[1000000];
int main() {
	FILE *fdx=fopen("index.txt","r");
	fgets(dex,1000000,fdx);
	fclose(fdx);
	fout=fopen("novel.txt","w");
	int p=0;
	while(dex[p]!=0) {
		FILE *frq=fopen("request.txt","w");
		fprintf(frq,"https://www.qbtxt.co/93_93964/");
		while(dex[p]!='\"') ++p;
		++p;
		while(dex[p]!='\"') fputc(dex[p++],frq);
		fclose(frq);
		++p;
		while(dex[++p]!='<') {
			fputc(dex[p],fout);
			putchar(dex[p]);
		}
		fprintf(fout,"\n\n");
		printf("\n");
		p+=9;
		system("C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python312\\pythonw.exe req.py");
		work();
	}
	fclose(fout);
	return 0;
}

再看看某一章节里的格式。

image

发现正文是从第一个<br>后开始的,每次四个&nbsp;(空格)接一段文本接两个<br />(换行),写一个解析章节内容的函数。

char str[1000000];
void work() {
	FILE *fin=fopen("response.txt","r");
	fgets(str,1000000,fin);
	int p=0;
	while(!(str[p]=='<'&&str[p+1]=='b'&&str[p+2]=='r'&&str[p+3]=='>')) ++p;
	p+=8;
	while(true) {
		if(str[p]=='&') {
			fputc(' ',fout);
			p+=6;
		}
		else if(str[p]=='<') {
			if(str[p+1]=='b') {
				fputc('\n',fout);
				p+=6; 
			}
			else break;
		}
		else fputc(str[p++],fout); 
	}
	fprintf(fout,"\n\n");
	fclose(fin);
}

运行后就可以等待爬取了。

novel.zip

posted @ 2023-11-15 18:10  #85  阅读(55)  评论(0)    收藏  举报