c语言获取网页
1. 用c语言,如何抓取网页上的数据。
你说的网页数据是指什么?
表格? 表单 ? HTML元素?
三种的处理方法不一样
楼上是利用第三方控件取得HTML代码~
2. c语言获取网页源码
其实程序是获取到了,只是对应网站是动态程序 301 是动态跳转 ,小弟你应该了解下HTML语言,或HTTP协议,程序是没有问题
3. c语言提取html中的信息
1. 如果你懂编程序:
使用字符串匹配算法,例如KMP算法,AC算法等。
AC算法比较好,网络上可能有现成的,弄一个源代码,再修改下就可以。
2. 如果你不懂编程:
用word,ultraedit等编辑工具,直接搜索你要的字符串就可以了吧。
4. 怎样使用C语言接收网页的信息
C语言打开网络
#include<stdio.h>
#include<winsock.h>
#pragmacomment(lib,"ws2_32.lib")
voidmain()
{
char*host="www..com";
WSADATAdata;
//winsock版本2.2
interr=WSAStartup(MAKEWORD(2,2),&data);
if(err)
return;
//用域名获取对方主机名
structhostent*h=gethostbyname(host);
if(h==NULL)
return;
//IPV4
if(h->h_addrtype!=AF_INET)
return;
structin_addrina;
//解析IP
memmove(&ina,h->h_addr,4);
LPSTRipstr=inet_ntoa(ina);
//Socket封装
structsockaddr_insi;
si.sin_family=AF_INET;
si.sin_port=htons(80);
si.sin_addr.S_un.S_addr=inet_addr(ipstr);
intsock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
connect(sock,(SOCKADDR*)&si,sizeof(si));
if(sock==-1||sock==-2)
return;
//发送请求
charrequest[1024]="GET/?st=1HTTP/1.1 Host:";
strcat(request,host);
strcat(request," Connection:Close ");
intret=send(sock,request,strlen(request),0);
//获取网页内容
intisstart=0;
while(ret>0)
{
constintbufsize=1024;
char*buf=(char*)calloc(bufsize,1);
ret=recv(sock,buf,bufsize-1,0);
printf("%s",buf);
free(buf);
}
closesocket(sock);
WSACleanup();
return;
}
5. 怎么通过C语言读取网页里面的数据
简单的请求格式
GET /index.php HTTP/1.0
host:www.zixue7.com
当我们和服务器连接上之后,发送上面的数据过去,服务器就会返回 index.php 这个页面给我们。
GET 这个 是表示 以什么方式请求,HTTP中还有很多其他的请求方式,常用的就 GET POST (更详细的 可以点开上面 http协议 那个链接)
GET 后面紧跟一个空格 然后 给出,要获取的资源的名称, /index.php 就表示获取网站服务器根目录下 index.php 执行后所产生的内容,我们也可以改成 GET / HTTP/1.0 这就表示获取默认首页的内容 。 GET /1.html HTTP/1.0 就是获取 服务器根目录下 1.html的内容,很容易理解吧。
接下来隔一个空格 跟上 HTTP/1.0 表示 http协议的版本,这个是固定的 。
第二行 host:www.zixue7.com 用来指定 访问哪个主机。 大家都知道,一个服务器可以放很多个网站,每个网站有不同的域名,所以我们需要用这个host来指定 我们要访问的是哪个网站,这样 才能正确得访问到我们想访问的网站。
第一步,连接服务器。
第二步,按照http协议,发送请求数据,然后就是接受返回的内容。
没错,就这么简单。
在编写程序之前,我们先用一个小工具来模拟一下这个过程,好让我们对http协议了解更深入一些。
telnet工具 如果是 win7下的朋友 猛戳这里-->win7开启telnet功能
到此为止,我假设大家电脑上已经开启了 telnet功能,正题开始。
telnet 他是一个基于tcp/ip 协议的程序,为我们用户提供一个 与其他电脑通信的工具,我们可以使用他来和其他电脑进行连接通信。
开始->运行->输入telnet回车, 出现一个黑框如下。
我们这时就可以输入命令,来连接远程主机,比如我们这次是要连接我们自学去论坛 的服务器,
那么我们就输入 open www.zixue7.com 80 然后回车。
open 是打开的意思 后面跟上 要打开那个主机 然后 后面跟上端口, web服务器默认使用的是80端口,所以 要加上80端口(不加端口 telnet默认是23端口)。
然后会出现下图的情况,这时候 我们就可以输入命令了,输入的命令都将被发送到自学去论坛的服务器上面。大家注意一下 下图红色箭头所指出的部分,那里就是一个输入光标,不用管其他的字。
这就代表 我们已经和远程主机连接上了,就相当于我们上节课中 客户端执行到 connect 函数 之后 就是要调用 send函数发送数据了,在这里 我们只需要按键盘输入到黑色窗口中 就会发送到服务端。
我们依次输入以下内容,(注意,不能按退格,输入错误了,就重新打开telnet,重新操作。)
6. C语言,如何对网页进行操作
首先,你这个想法还是很不错的,我以前也想这么做过。不过,学习html语言在这里肯定是次要的,主要的还是要学会分析的方法,而不是掌握被分析的内容,你说是吧?如果要用程序抓取网页自动保存到本地,就要会用socket编程,或者学习使用libcurl库,这些都比学html语言有用的多,不做网页抓取的时候,这些知识依然非常有用。而且,不同的网页,内容不同,规律可能也不同。比如你给的那个例子网址,我右键查看了源代码,里面就根本没有所谓的<td>、<tr>标签,即它的表格不是通过这些标签来实现的。所以,让你去看这些标签,就是南辕北辙了。网页分析,说到底还是字符串处理和分析。所以,你如果真的想学,不如好好学一下正则表达式和字符串处理相关的函数,以及函数库,比如tidy库等。正则表达式是用来匹配一类字符串的,方便找规律,也方便处理,你稍微学习一点点就知道有多么的强大,多么的有用了。而且,正则表达式跟语言无关,什么语言都能用得到,学这个不亏的。标准C库中没有正则表达式相关的函数,一般来说C中使用两种正则表达式库,一为POSIX
C正则库,二为perl正则库PCRE。相比较而言PCRE要强大些,POSIX
C正则库就足够使用。下面,这几个链接里面有网页分析的一些例子,虽然不都是C语言来处理的。但是,思路都是一致的。
所以,说到底,还是正则表达式、正则函数库、字符串处理函数这些才是根本。先说这些,希望对你有所帮助。如果你在学习过程中还有什么问题,欢迎随时交流:)C#的: http://www.jb51.net/article/16618.htmC#的: http://mytiu.blog.163.com/blog/static/1059718452009127112226478/这里还有一段C语言的代码,
是将下载下来的网页源代码处理成没有标签的纯文字文本#include
<tidy.h>#include
<buffio.h>#include
<stdio.h>#include
<errno.h>int
main(int
argc,
char
**argv
){const
char*
input
=
"<title>Foo</title>
Foo!";TidyBuffer
output
=
{0};TidyBuffer
errbuf
=
{0};int
rc
=
-1;Bool
ok;TidyDoc
tdoc
=
tidyCreate();
//
Initialize
"document"printf(
"Tidying:\t%s\n",
input
);ok
=
tidyOptSetBool(
tdoc,
TidyXhtmlOut,
yes
);
//
Convert
to
XHTMLif
(
ok
)rc
=
tidySetErrorBuffer(
tdoc,
&errbuf
);
//
Capture
diagnosticsif
(
rc
>=
0
)rc
=
tidyParseString(
tdoc,
input
);
//
Parse
the
inputif
(
rc
>=
0
)rc
=
tidyCleanAndRepair(
tdoc
);
//
Tidy
it
up!if
(
rc
>=
0
)rc
=
tidyRunDiagnostics(
tdoc
);
//
Kvetchif
(
rc
>
1
)
//
If
error,
force
output.rc
=
(
tidyOptSetBool(tdoc,
TidyForceOutput,
yes)
?
rc
:
-1
);if
(
rc
>=
0
)rc
=
tidySaveBuffer(
tdoc,
&output
);
//
Pretty
Printif
(
rc
>=
0
){if
(
rc
>
0
)printf(
"\nDiagnostics:\n\n%s",
errbuf.bp
);printf(
"\nAnd
here
is
the
result:\n\n%s",
output.bp
);}elseprintf(
"A
severe
error
(%d)
occurred.\n",
rc
);tidyBufFree(
&output
);tidyBufFree(
&errbuf
);tidyRelease(
tdoc
);return
rc;}
7. 用C如何读取一个网页内容
首先,用C读取已知文件名的本机文件不是问题吧?那问题实质是在获取URL表示的文件,特别是获取远程WWW服务器以URL表示的文件,把它存放到本机。
有一个API函数叫 URLDownloadToFile(), 用起来特简单。只要一句:
URLDownloadToFile(NULL, url, filename, 0, NULL);
其中url是你需要的文件,filename是下载到本机后的本地文件名。例如:
URLDownloadToFile(NULL, "http://127.0.0.1/1.txt", "C:\\temp\\1.txt", 0, NULL);
下面处理C:\temp\1.txt就可以了。
这个函数在urlmon.h中有说明;需使用urlmon.lib. 有关参数意义请自己查。好像最后一个参数是指定回调函数,可以检查下载状态。但我从来没指定过。从远程站点一次下载很多文件时特别好用。我曾经用它循环起来,一次下载两千多个SWF文件。
但要注意:较大的文件不一定下载完全;有些站点可能检查链接源,限制下载。
8. c语言获取网页源码
这个不是c语言的问题,网页很明确的告诉这个文档已经搬到t.sina.com.cn。这是一个跳转网页,你手动复制weibo.sina.com到浏览器,你看会跳转到weibo.com/guide/welcome,c不会像浏览器那样跳转后再获取吧,除非你改下程序,但是可能要涉及到http协议了,学术浅薄,就不多讲,祝你好运!