多谢Arias的建议.
我的网站的内容都是动态的,我考虑使用下面这种方法:
首先得到网站的首页,然后分析页面内的链接,再根据链接得到下一层的页面内容,依次得到网站内所有的动态内容(如果层数太多,则只取4层以内),将查到的页面放入数据库中。需要检索时在数据库中检索内容即可,数据库隔一段时间更新一次。
我的思路就是这些,只是对网页内链接的分析不会,这个问题太麻烦。
请大家多多指教。
我的网站的内容都是动态的,我考虑使用下面这种方法:
首先得到网站的首页,然后分析页面内的链接,再根据链接得到下一层的页面内容,依次得到网站内所有的动态内容(如果层数太多,则只取4层以内),将查到的页面放入数据库中。需要检索时在数据库中检索内容即可,数据库隔一段时间更新一次。
我的思路就是这些,只是对网页内链接的分析不会,这个问题太麻烦。
请大家多多指教。
解决方案 »
- 两个进程可以同时访问一个class文件吗?
- 调用mysql存储过程的问题
- 求购销管理系统的源代码 急!!!!!!!!!!
- java.util.Timer运行效率和占用系统资源
- hibernate中,对象A与对象B是一对多的关系,hibernate是如何来维护它们之间的关系,并与数据库保护同步的?
- 救命 cvsnt(login 出错:cvs [login aborted]: Error reading from server 192.168.1.100: -1: Unknown error)
- response.getOutputStream()
- 如果socket不断,TCP/IP在应用层永远不会丢包/丢数据吗?
- struts关于标签库的问题
- EJB的问题
- 请问 如何对jar文件象通过winrar对java 文件进行加密那样简单;
- torque使用问题
可以分析<a href="xxxxxxxx">xxx</a>
/**
* <a 开头输入
* return hrefValue
*/
char* parsetaga(char* strtag)
{
const char tokseps[] = " >\"\t\r\n";
char* t;
t = strtok(strtag,tokseps);
// printf("%s",t);
while(t){
// printf("%s\n",t);
if(strlen(t)>4){
if(!strncmp("href=",t,5)){/* href= */
if(strlen(t)>5){/*href=http://... || /index.html... */
t+=5;
}else{/*href=[]http://... || href= []/index.html... */
t = strtok(NULL,tokseps);
}
// printf("$%s$\n",t);
return t;
}
}else{
if(!strncmp("href",t,4)){/*href =http://... || /index.html... */
t = strtok(NULL,tokseps);
if(strlen(t)>1) {/* =http */
t+=1;
}else{/* = */
t = strtok(NULL,tokseps);/* url*/
}
// printf("$%s$\n",t);
return t;
}
}
t = strtok(NULL,tokseps);
}
return NULL;}void thread_write(void*){
for(;;){
if(mbuf->lock!=1){/* if mbuf->data not filld then wait*/
for(;;){
if(mbuf->lock == 1)break;
_sleep(1);
}/*for*/
}/*if*/
mbuf->lock = 0;
{
char * c;
char * p = mbuf->data;
char * e;
char buf[2048];
for(;;){/*parse doc*/
memset(buf,0,2048);
if((p = strchr(p,'<'))){
if((e = strstr(p,"</"))){
strncpy(buf,p,e-p+1);
if(c = parsetaga(buf)){
printf("%s\n",c);
}
p = e+1;
}else {
break;
}
}else{
break;
}
}
}
mbuf->lock = -1;/* mbuf->data isused */
}
}
void thread_read(void*){
char buff[BUF_SIZE];
mbuf = (BUF)malloc(sizeof(BUF));
FILE *fp;
size_t read = 0;
fp = fopen("c:\\index.htm","r");
mbuf->lock = -1;
for(;;){
memset(buff,0,BUF_SIZE);
read = fread(buff,sizeof(char),BUF_SIZE,fp);
if(read>0){
// printf("%s",buff);
if(mbuf->lock != -1)/* if mbuf->data not isused then wait*/
for(;;){
if(mbuf->lock == -1){
_sleep(1);
break;
}
}
mbuf->lock = 0;
mbuf->data = strdup(buff);
mbuf->lock = 1;
}else{
break;
}
} fclose(fp);
}int main(int argc, char* argv[])
{
_beginthread((void(__cdecl*)(void*))thread_read,0,NULL);
_beginthread((void(__cdecl*)(void*))thread_write,0,NULL);
_endthread();
// while(mbuf->data != NULL){
// _sleep(1);
// }
//<br> <a href></a> <br/>
// char* tag = (char*)malloc(BUF_SIZE);
// memset(tag,0,BUF_SIZE);
// strcpy(tag,"adfsad<a href= >a< / a>");
// printf(endTag(tag));
return 0;
}