简单网页爬虫

这是第一次写的爬虫,在windows平台下的VS,对象是一个旅游网站上面的图片,实现其先要对VS的数据库进行设定,然后才能运行改程序

#include<stdio.h>
#include<stdlib.h>
#include <assert.h>
#include <string.h>
#include <Urlmon.h>

void loding_html_first();
void loding_html_second();
void loding_picture();
//三次下载,第一次下载的是354页的页面,第二次下载的是每张图片点进去的页面,在此页面中下载图片

#define PAGE_NUM 4
int main()
{
	loding_html_first();
	loding_html_second();
	loding_picture();
	return 0;
}

void loding_html_first()  //http://chanyouji.com/?page=1
{
	char url_head[100] = "http://chanyouji.com/?page=";
	char file[100] = {0};
	char url[256] = {0};
	for(int i=1; i<=PAGE_NUM; i++)
	{
	    sprintf(file, "D:\\电影\\gg\\%d.html", i);  //文件名 //url字符串后面有一个字符串结束符,则该函数是将后面的数字覆盖了前面的结束符。
	    sprintf(url, "%s%d", url_head, i);  
	    URLDownloadToFile(NULL, url, file, 0, NULL);
	}
}

void loding_html_second()  //http://chanyouji.com/trips/547391
{
	char file_name[128];
	for(int i=1; i<=PAGE_NUM ;i++)    //共有354页,1.html
	{
		sprintf(file_name, "D:\\电影\\gg\\%d.html", i);
	    FILE *fr = fopen(file_name, "r"); 
	    assert(fr != NULL);
		//Evaluates an expression and when the result is FALSE, prints a diagnostic message and aborts the program.  
	
		fseek(fr, 0, SEEK_END);
		int file_lenth = ftell(fr);
		rewind(fr);

		char *temp = (char *)malloc(sizeof(char)*file_lenth+10);
		fread(temp, sizeof(char), file_lenth, fr);
		fclose(fr);

		//寻找第二次下载所需要的目标
		char new_url[256];
		char *point=temp;
		char num[10] = {0}; 
		char file_nam[128];

		while((point = strstr(point,"/trips/")) != NULL)   //将该字符后的六位拿出来
		{
			point = point+strlen("/trips/");
			strncpy(num, point, 6);
			sprintf(new_url,"%s%s","http://chanyouji.com/trips/",num);
			printf("%s",new_url);
			sprintf(file_name,"D:\\电影\\hh\\%d.html",i);//将文件存入电脑
			URLDownloadToFile(NULL,new_url,file_name,0,NULL);
			point+=6;
		}
		free(temp);
	}
}

void loding_picture() 
{
	char file_name1[128];
	FILE *fr;
	int i = 1;
	int m = 1;
	while(sprintf(file_name1,"D:\\电影\\hh\\%d.html",i), fr=fopen(file_name1,"r"))
	{
		fseek(fr, 0, SEEK_END);
		int file_lenth = ftell(fr);
		rewind(fr);

		char *ptr = (char *)malloc(sizeof(char)*file_lenth+10);
	    assert(ptr != NULL);

		fread(ptr, sizeof(char), file_lenth, fr);
		fclose(fr);

		char *pt = ptr;
		char buffer[256];
		char file_name2[128] = {0};
		
		while((pt=strstr(pt,"http://p.chanyouji.cn/")) != NULL)
		{
			strncpy(buffer,pt,256);//对该字符串进行截断操作
			buffer[255]=0;
			char *p = strstr(buffer,".jpg");
			if(p != NULL)
			{
				*(p+strlen(".jpg"))=0;
				sprintf(file_name2,"D:\\电影\\mm\\%d.jpg",m);//将文件存入电脑
				printf("%s", buffer);
                URLDownloadToFile(NULL, buffer, file_name2, 0, NULL);
			}
			else
			{
				continue;
			}
			++m;
			pt+=strlen("http://p.chanyouji.cn/");
		}
		free(ptr);
		++i;
	}
	if(fr==NULL)
	{
		printf("open error");
		exit(1);
	}
}

每个网页都有一个URL,找到该URL调用函数访问该点进行下载,下载下来该网页的内容,将其HTML文件包进行逐个字符检查,找出有用的数据进行存储或者下载图片等。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值