2006年12月29日

 下面就是完整的一个显示页面的例子:

<%@ LANGUAGE="VBScript" %>
<%
dim j
j=0
%>
<%
Function c2u(text)
  For i=1 to Len(text)
  c=Mid(text,i,1)
  c2u=c2u&"&#x" & Hex(AscW(c)) & ";"
  next
 End Function
%>
<%
 set conn=server.createobject("adodb.connection")
 conn.open"dsn=money;uid=;pwd=;database=money.mdb"
 sql0="update stock set temp=(price5-price4)/price4*100"
 set rs0=server.createobject("adodb.recordset") 
 rs0.open sql0,conn
 sql="select num,name,temp from stock where temp<0 order by temp ASC"
 set rs=server.createobject("adodb.recordset") 
 rs.open sql,conn 
%>
<% Response.ContentType="text/vnd.wap.wml" %><?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"><wml>

<card id="ShowCurrent">
<p>
  <%=c2u("跌幅前五名:")%><br/>
<%
while j<5 and not rs.eof
%>
  <%=rs(0).Value%>-<%=c2u(rs(1).Value)%>&nbsp;<%=rs(2).Value%>%
<br/>
<%
rs.movenext
j=j+1
wend
%>
</p>
<do type="accept" label="<%=c2u("返回")%>">
 <go href="index.asp#Welcome"/>
</do>
<p align="center">
(c) 501 Studio, 2001<br/>
All rights reserved !
</p>
</card>
</wml> 
<%
rs.close
%>

  下面就是完整的一个显示页面的例子:

<%@ LANGUAGE="VBScript" %>
<%
dim j
j=0
%>
<%
Function c2u(text)
  For i=1 to Len(text)
  c=Mid(text,i,1)
  c2u=c2u&"&#x" & Hex(AscW(c)) & ";"
  next
 End Function
%>
<%
 set conn=server.createobject("adodb.connection")
 conn.open"dsn=money;uid=;pwd=;database=money.mdb"
 sql0="update stock set temp=(price5-price4)/price4*100"
 set rs0=server.createobject("adodb.recordset") 
 rs0.open sql0,conn
 sql="select num,name,temp from stock where temp<0 order by temp ASC"
 set rs=server.createobject("adodb.recordset") 
 rs.open sql,conn 
%>
<% Response.ContentType="text/vnd.wap.wml" %><?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"><wml>

<card id="ShowCurrent">
<p>
  <%=c2u("跌幅前五名:")%><br/>
<%
while j<5 and not rs.eof
%>
  <%=rs(0).Value%>-<%=c2u(rs(1).Value)%>&nbsp;<%=rs(2).Value%>%
<br/>
<%
rs.movenext
j=j+1
wend
%>
</p>
<do type="accept" label="<%=c2u("返回")%>">
 <go href="index.asp#Welcome"/>
</do>
<p align="center">
(c) 501 Studio, 2001<br/>
All rights reserved !
</p>
</card>
</wml> 
<%
rs.close
%>

 下面就是完整的一个显示页面的例子:

<%@ LANGUAGE="VBScript" %>
<%
dim j
j=0
%>
<%
Function c2u(text)
  For i=1 to Len(text)
  c=Mid(text,i,1)
  c2u=c2u&"&#x" & Hex(AscW(c)) & ";"
  next
 End Function
%>
<%
 set conn=server.createobject("adodb.connection")
 conn.open"dsn=money;uid=;pwd=;database=money.mdb"
 sql0="update stock set temp=(price5-price4)/price4*100"
 set rs0=server.createobject("adodb.recordset") 
 rs0.open sql0,conn
 sql="select num,name,temp from stock where temp<0 order by temp ASC"
 set rs=server.createobject("adodb.recordset") 
 rs.open sql,conn 
%>
<% Response.ContentType="text/vnd.wap.wml" %><?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"><wml>

<card id="ShowCurrent">
<p>
  <%=c2u("跌幅前五名:")%><br/>
<%
while j<5 and not rs.eof
%>
  <%=rs(0).Value%>-<%=c2u(rs(1).Value)%>&nbsp;<%=rs(2).Value%>%
<br/>
<%
rs.movenext
j=j+1
wend
%>
</p>
<do type="accept" label="<%=c2u("返回")%>">
 <go href="index.asp#Welcome"/>
</do>
<p align="center">
(c) 501 Studio, 2001<br/>
All rights reserved !
</p>
</card>
</wml> 
<%
rs.close
%>

  下面就是完整的一个显示页面的例子:

<%@ LANGUAGE="VBScript" %>
<%
dim j
j=0
%>
<%
Function c2u(text)
  For i=1 to Len(text)
  c=Mid(text,i,1)
  c2u=c2u&"&#x" & Hex(AscW(c)) & ";"
  next
 End Function
%>
<%
 set conn=server.createobject("adodb.connection")
 conn.open"dsn=money;uid=;pwd=;database=money.mdb"
 sql0="update stock set temp=(price5-price4)/price4*100"
 set rs0=server.createobject("adodb.recordset") 
 rs0.open sql0,conn
 sql="select num,name,temp from stock where temp<0 order by temp ASC"
 set rs=server.createobject("adodb.recordset") 
 rs.open sql,conn 
%>
<% Response.ContentType="text/vnd.wap.wml" %><?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"><wml>

<card id="ShowCurrent">
<p>
  <%=c2u("跌幅前五名:")%><br/>
<%
while j<5 and not rs.eof
%>
  <%=rs(0).Value%>-<%=c2u(rs(1).Value)%>&nbsp;<%=rs(2).Value%>%
<br/>
<%
rs.movenext
j=j+1
wend
%>
</p>
<do type="accept" label="<%=c2u("返回")%>">
 <go href="index.asp#Welcome"/>
</do>
<p align="center">
(c) 501 Studio, 2001<br/>
All rights reserved !
</p>
</card>
</wml> 
<%
rs.close
%>

2006年10月17日

谷歌(Google)的总部建在美国加利福尼亚州,离风景如画的海岸线公园仅数步之遥。它在美国和世界其他国家也有分部,但各处管理风格大同小异,都信奉以人为本的原则。  想象中的谷歌总部应该是座摩天大楼,进去才发现,事实上它是由很多建筑组成的一个园区。园区里布满绿地、水池和喷泉,这在寸土寸金的加州硅谷实属罕见。

  办公楼大厅的布置跟很多美国公司截然不同。大厅告示板上密密麻麻地贴着来自世界各地的剪报,走廊墙边靠着脚踏车,地上散放着橡胶健身球,很多员工聚集在走廊里讨论新程序的设计,边说边锻炼身体。

  谷歌还有一个体育馆,那儿可以玩台球、乒乓球,有各种健身器械、洗衣机、烘干机、电子游戏厅、钢琴,用电脑累了,可以弹弹钢琴,也可去按摩室做按摩。谷歌园区还有发廊、洗车行、干洗店、咖啡馆……所有服务都不用员工交一分钱!

  其他方面谷歌考虑得也很周到,比如为了让新妈妈或新爸爸省下做饭的时间来陪小宝宝,在婴儿出生后一个月,公司会给新父母报销500美元的外卖费。为了让员工集中精力工作和生活,公司花钱聘了很多跑腿的,专门帮员工办私事:送车去维修站、换牌照、充当临时保姆等。

  谷歌大楼跟其他办公楼最明显的区别就是到处是吃的。零食柜、饮料机和冰箱遍布各个角落,可随意取用。此外每层楼还设有几间“小厨房”,不但一切厨房设备俱全,靠墙四周还排列着一只只巨大的透明塑料箱。有装橡胶糖的,有装巧克力豆的,有装腰果的……光早餐麦片就有5种牌子。冰箱里面同样摆得满满当当:各种饮料,酸奶,洗好的水果,切好的胡萝卜和其他能生吃的蔬菜应有尽有。

  “百尺之内必有食物!”是公司内部的管理规定,因此还引出来一段笑话。据说有位仁兄好较真儿,他怀疑后勤组没有做到这一点,有事没事儿经常量自己与最近食物之间的距离。一天,他发现自己跟食物的距离是120英尺,便赶紧向后勤组反映。谁知对方的回答更经典:“您站的地方底下一层是咖啡室,食物离你绝对没有超过100英尺!”

  都说世上没有免费的午餐,偏偏谷歌不信邪,打出一日三餐免费供应的旗号。不但免费,而且保证高质量。谷歌的员工布莱特在网上开了个个人博客,博客上没有一个字,全是公司午餐的照片,博客就叫《我在谷歌吃了啥?》。布莱特的图片博客已经坚持两年多,积累了500多张饮食照片。但每周仍有新照片出现,张张不重复,图片上的美食真是让人垂涎三尺。

  这里的菜名也很幽默:“查里斯烧烤”、“西方遇到东方”、“蔬菜头”……用料上等,做得也相当地道,与星级饭店不相上下。

  谷歌人跟其他大公司员工不同,他们多数穿牛仔裤和T恤衫,有人牵着狗来用餐,有人穿着旱冰鞋在人行道上玩花样,感觉像个大学校园。

  谷歌内部有一个规定,任何项目都必须在团队环境中完成,即使是很小的项目也不例外。工作团队一般都由三四个人组成。为了促进队员的交流,他们会被安排在同一间办公室里工作,就连CEO也不例外。迄今为止,首席执行官施密特仍然跟手下的技术工程师分享一间办公室。

  办公室里有沙发、躺椅,甚至还有狗的坐垫等,因为谷歌人经常会把宠物带到单位来。

  走在办公大楼里,经常会看到有人坐在地板上冥思苦想;有人在津津有味地吃着东西;有人跟狗挤在一张沙发上,双手在电脑键盘上飞快地敲击着。

  办公室里有地毯和沙发,却没有一张像样的电脑桌,显示器竟放在一个用门板和木架子钉起来的东西上。原来那是谷歌创业时,第一批电脑工程师们用的办公桌,因为有纪念意义又坚固耐用,现在已经成了公司的抢手货。

     各位,想想Google公司的文化和环境,再对比下我们所在公司的环境,您是不是也想发点牢骚呢?:)

2006年09月26日

using System.Management;

/// <summary>
/// 获取MAC地址
/// </summary>
/// <returns></returns>
public string GetNetCardMacAddress()
{
ManagementClass mc;
ManagementObjectCollection moc;
mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
moc = mc.GetInstances();
string str = "";
foreach(ManagementObject mo in moc)
{
if((bool)mo["IPEnabled"] == true)
str = mo["MacAddress"].ToString();

}
return str;
}

/// <summary>
/// C盘序列号
/// </summary>
/// <returns></returns>
public string GetDiskVolumeSerialNumber()
{
ManagementObject disk;
disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
disk.Get();
return disk.GetPropertyValue("VolumeSerialNumber").ToString();
}

为什么研究这个案例
在不到三年的时间里,MySpace成为全美访问量前五名的网站。2006年6月独立访问量4800万,页面浏览量274亿。也许它的盈利程度赶不上Google、eBay或Yahoo,但它很可能成为下一个互联网“平台”。而MySpace一举超越更早进入社会性网络领域的Friendster,也使得MySpace成为案例研究的好材料。
我进行了如下采访:几位在MySpace发展早期于该公司有密切关系的人士,尽管他们现在已经与MySpace没有什么联系。社会性网络从业的有关人员--包括竞争对手公司的产品经理和MySpace的服务提供商,等等。我本人是MySpace一个竞争对手的董事会观察员(board observer)。
成功的关键
给用户更多自由设计他们的MySpace主页,让用户能高度地表达自我和与朋友交流
MySpace的成功有很多因素。但如果让我选择一个,就是这一条。MySpace的早期成功开始于十几岁的孩子的用户群。这些孩子们用MySpace分享照片、交流、制作他们自己最棒的个人主页。让独立制作乐队来引领用户发现音乐是一个很好的功能,但并不构成MySpace主要的访问量。另外,不少用户确实利用MySpace找对象,但这类活动主要发生在21-26岁的用户中,而这不是MySpace的主要用户群。
分享照片的重要性怎样强调都不为过。数字照相机和手机照相功能的普及是很多社会性网络发展的驱动力,不光是MySpace。MySpace让它的用户可以使用第三方服务如PhotoBucket和ImageShack在个人主页中加入更多照片。我认为这是MySpace超越Friendster的一个重要原因。
缩短开发周期,使产品迅速适应用户要求
MySpace具体采取了什么措施来实现这个高度自我表达的环境呢?它采取了一个最基本的策略:不要预先去想像用户会想要如何在这个网站中互动。当用户自发地制作相同兴趣用户组群的主页时,MySpace接受了这种用户行为,而Friendster没有。MySpace倾听用户的反馈、快速开发、快速推出新产品。MySpace增加Blog、留言板、讨论区、即时通讯等功能都远远早于Friendster。部分原因是Friendster受到系统扩容问题的困扰。当用户用技术手段改动MySpace个人主页功能,把更多PhotoBucket的照片加到个人主页时,MySpace也没有干预这种尝试。通过这种改动,用户可以在他们的朋友的留言版加照片和图片。这个功能成了让用户在MySpace花更多时间的一个主要原因。
最初的用户积累依靠三种手段的结合:病毒式增长、非网络广告、网络传播合作伙伴
大家广泛认为MySpace上线后立刻通过口口相传的病毒式传播迅速增长用户群。实事不是这样。MySpace利用了多种战术的结合,包括成功地运用了传统的推广手段、利用已有的网络品牌来花钱收集用户(Cost per acquisition, CPA)。MySpace是Intermix公司中的ResponseBase团队的作品,这个团队有很强的电子邮件营销和CPA的背景。当MySpace的用户量达到几百万后,他们才开始依靠病毒传播。在“启动战略”部分我会深入分析这一点。
有关产品和研发政策的决策,要考虑到网站的负载能力
被大家熟知的Friendster和MySpace竞争的一个重要转折点是:Friendster的用户由于网站负载能力的问题而放弃使用Friendster。尽管这是由于Friendster自身的问题造成的,但在MySpace方面,他们在早期设计阶段就充分考虑了这一点。首先,MySpace决定不显示“朋友链”。“朋友链”这个显示朋友连接关系的功能,在网站上随时显示时会极大加重系统的运算量。为了保证网站的负载能力,MySpace决定不提供这个Friendster的核心功能。第二,早期发展中,MySpace只允许美国用户注册。Friendster曾经在(现在仍旧在)菲律宾相当成功。但很不幸的是,在网络品牌广告市场在亚洲成熟之前,这些来自菲律宾的流量更多的是花费,而不是收入。而对于能产生广告价值的美国用户,这却对网站的访问速度等负载指标产生了负面影响。MySpace直到美国用户量突破了临界点后才开放其他国家的注册,这成为一个正确的决定。
启动战略

MySpace的主意最初来自Intermix的Chris DeWolfe和Tom Anderson。他们是通过Intermix收购ResponseBase加入Intermix的。很多ResponseBase的成员之前来自X-drive,因此,他们有很强的针对网络个人用户的开发和推广经验。看到Friendster最初的成功,并意识到他们在ResponseBase/Intermix所拥有的资源后,他们认为自己能在这个领域很有竞争力。ResponseBase有一个包括一亿电子邮件的数据库;Intermix拥有几个网站,而这些网站的用户很多处在MySpace用户的年龄段。
MySpace花了三个月时间开发出一个和Friendster功能类似的网站,并于2003年底上线。MySpace最初的战略并没有以独立制作乐队和围绕音乐的社会网络为目标。有关音乐的主题是以用户为中心的网站发展过程中自然发展出来的。有趣的是,在最初上线和开始推广后的6到9个月,用户增长并不成功。MySpace最初的推广手段是在Intermix的员工(约250人)中进行有奖竞赛,让员工们邀请他们的朋友注册。这产生了一定效果,但用户数很有限。接下来,他们利用ResponseBase的电子邮件列表进行邮件推广。这有一些影响,但基本上是失败的。这是因为电子邮件推广不能象已经存在的小组或组织那样吸引能对网站产生忠实度的用户。于是MySpace开始进行线下推广,对洛杉矶地区的Club、乐队、和各种派对进行赞助。这些努力逐渐给MySpace造成影响。更重要的是吸引了很多小的线下社区(即小组)来使用MySpace。100到1000人之间的小社区开始产生雪球式的病毒增长,并吸引更多的个人用户加入。

最初用户建立起来后,MySpace开始进一步利用Intermax的渠道和媒体关系扇风助燃。合作伙伴的推广结合上已有的较强用户基础,使得MySpace从最初的成功走向腾飞。如果没有利用传统的推广手段,MySpace恐怕不会有我们今天看到的高速增长。
财务结果分析
Intermix 于2005年7月被Fox(译者:Fox是莫多克新闻集团的一部分)收购,MySpace是收购的主要原因。我估计MySpace的价值大约为Fox的出价(5亿8千万美元)与Intermix作为上市公司的市值(约1亿美元)之差。即MySpace的收购价在5亿美元上下。但这启收购案中还有一个复杂因素,就是Intermix公司当时面临的侵犯互联网用户隐私的法律纠纷。Fox收购Intermix后则这些官司也转嫁到Fox头上,这使得MySpace的实际收购价值可能比5亿美元还高得多。
据报道,MySpace在2005年计划收入2千万美元,但当时公司正出于一个急速上升的情况。2005年第二季度的收入约为6百万美元。根据这些数据,Fox的出价大约是MySpace年收入的20倍,在当时被很多人认为买贵了。然而收购不到一年,MySpace每月的广告收入已经大约有8百万美元。按照这个数据,Fox的收购付了MySpace年收入的5倍,这还是个很合理的价格。再考虑到MySpace的品牌效应和对美国文化产生的冲击,应该说Fox花5亿美元收购MySpace是非常英明的(特别是再联系到最近Fox和Google之间的9亿美元的交易)。(译者:Fox和Google的交易中很重要的一部分是在所有MySpace页面放置Google搜索)而人们不禁要反思为什么当初Yahoo、MSN、AOL、和Google错过了收购MySpace的机会。为什么不是这些互联网业的巨头预测到MySpace在互联网上的巨大增长潜力呢?
再让我们看看风险投资和创始人的收益如何?Bill Burnham有一篇非常好的详细分析 ,我就不重复他的发现了。Redpoint风投公司在2005年2月用1150万美元帮助MySpace从Intermix中分拆(spinout)出来,并由此获得25%的股份。由此计算,资金注入前MySpace的估值约为3500万美元。这次分拆发生时MySpace已经相当成功了,稳坐Alexa排名100以内。(原作者注:很有趣地注意到过去一年半中对已经有一定成功度的互联网公司的估值发生了很大变化。Redpoint对MySpace这个排100名以内的用户产生内容的公司的估值3500万美元。而Facebook、Bebo、YouTube、Tagged等网站在融资时的估值远远高于这个。)Intermax在和约中很聪明地增加了这样一个条款:如果Intermix在一年中被收购,将有权以一固定的价格买回Redpoint手中的MySpace股份。根据这一条款,MySpace被收购给Redpoint风投公司带来了约6500万美元的回报(五个月中大约回报了4倍)。这是极好的回报率。也让我们看到风险投资不一定要去发现下一个好主意是什么,想法挤进已经在运作中的下一个好主意也不错。VantagePoint风投伙伴公司获得的回报最高。他们早在MySpace成功之前就是Intermix的投资者。作为Intermix的大股东,他们1500万美元的投资换回1亿3900万,9.1倍的回报。VantagePoint并不是因为MySpace而投资,但成为了MySpace成功的收益者。
那么创始人Chris、Tom和其他ReponseBase团队的成员从Fox收购中获利如何呢?Intermix从开始就完全拥有MySpace的股份,因此MySpace的资产结构不是一个典型的创业公司的构成。然而,我被告知在MySpace早期,Intermix给ResponseBase团队成员以5万美元购买1/3的MySpace股份的股票期权。当时的合同在这里可以看到。Chris和Tom都参加了“这一轮”资产组构。加上后来又随时间分配的、及以奖金形式获得的股票期权,他们应该都身价几百万以上了。

总结与思考
如果按照注册用户数把MySpace和Skype算作最大的Web2.0的成功案例的话,我想我们应该注意到一个有趣的共同点:他们在起步初期都得益于和一个强大的推广渠道成为伙伴。我以后要写的Skype案例分析会提到,Skype最初的推广是通过Kazaa(译者:一个P2P下载网络)。由于Skype的创始人就是Kazaa的创始人,他们很轻易地通过在Kazaa客户端软件对Skype进行推广获得了最初的用户。虽然Skype和MySpace都是有病毒型传播能力的产品,但如果没有最初传统推广渠道的激励,他们恐怕不会在如此短的时间获得如此大的成功。

进一步,Web2.0的创业者们应该意识到他们不仅仅是在和反应迟钝的大公司竞争,同时也在和那些也在初创阶段,但已经把强大的推广渠道掌握在手中的小公司竞争。除Skype和MySpace之外,广告网络领域也有类似的案例。比如Livedigital.com,由广告网络公司Oversee.net创办,9个月内就进入Alexa前5000名。另一个网络广告公司Blue Lithium采用了类似的策略,用它自己网站的剩余广告空间为它的另一个社区网站作宣传。那么后来者如TagWorld和MyYearBook如何呢?你在MySpace的“生态圈”(那些专门为MySpace用户提供图像和HTML编程服务的网站)随处可见他们的广告。这些推广的效果可能大相径庭,但不可否认大家都在用这些手段。也许Web2.0的新思维对传统的推广渠道不屑一顾,但MySpace和Skype都证明在Web2.0的热浪中,建立推广渠道伙伴不可忽视。
如果创业者选择了纯病毒式推广的道路 ,那你的产品必须能非常明确地给用户带来极大的价值,而且简单易用。否则,其他有推广渠道的创业公司将成为你难以逾越的竞争对手。

2006年09月23日

一、本机直接上网时:
#region 获取指定远程网页内容
/// <summary>
/// 获取指定远程网页内容
/// </summary>
/// <param name="strUrl">所要查找的远程网页地址</param>
/// <param name="timeout">超时时长设置,一般设置为8000</param>
/// <param name="enterType">是否输出换行符,0不输出,1输出文本框换行</param>
/// <param name="EnCodeType">编码方式</param>
/// <returns></returns>
/// 也可考虑 static string

public string GetRequestString(string strUrl,int timeout,int enterType,Encoding EnCodeType)
{
string strResult;
try
{
HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(strUrl) ;
myReq.Timeout = timeout;
HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();
Stream myStream = HttpWResp.GetResponseStream () ;
StreamReader sr = new StreamReader(myStream , EnCodeType);
StringBuilder strBuilder = new StringBuilder();

while (-1 != sr.Peek())
{
strBuilder.Append(sr.ReadLine());
if(enterType==1)
{
strBuilder.Append("\r\n");
}
}
strResult = strBuilder.ToString();
}
catch(Exception err)
{
strResult = "请求错误:" + err.Message;
}
return strResult ;
}

#endregion二:通过域环境代理上网时这样就不行了!

private void Page_Load(object sender, System.EventArgs e)
{

string url1 = "http://csharp.xdowns.com";
string url2 = "http://csharp.xdowns.com/logo.gif";
Response.Write("<li>方法1:");
Response.Write(url1 + " 存在:" + UrlExistsUsingHttpWebRequest(url1).ToString());
Response.Write("<li>方法2:");
Response.Write(url1 + " 存在:" + UrlExistsUsingSockets(url1).ToString());
Response.Write("<li>方法3:");
Response.Write(url1 + " 存在:" + UrlExistsUsingXmlHttp(url1).ToString());

Response.Write("<li>方法1:");
Response.Write(url2 + " 存在:" + UrlExistsUsingHttpWebRequest(url2).ToString());
Response.Write("<li>方法3:");
Response.Write(url2 + " 存在:" + UrlExistsUsingXmlHttp(url2).ToString());
}
private bool UrlExistsUsingHttpWebRequest(string url)
{
try
{
System.Net.HttpWebRequest myRequest =(System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
myRequest.Method = "HEAD";
myRequest.Timeout = 100;
System.Net.HttpWebResponse res = (System.Net.HttpWebResponse)myRequest.GetResponse();
return (res.StatusCode == System.Net.HttpStatusCode.OK);
}
catch(System.Net.WebException we)
{
System.Diagnostics.Trace.Write(we.Message);
return false;
}
}
private bool UrlExistsUsingXmlHttp(string url)
{
//注意:此方法需要引用Msxml2.dll
MSXML2.XMLHTTP _xmlhttp = new MSXML2.XMLHTTPClass();
_xmlhttp.open("HEAD",url,false,null,null);
_xmlhttp.send("");
return (_xmlhttp.status == 200 );
}

private bool UrlExistsUsingSockets(string url)
{
if(url.StartsWith("http://")) url = url.Remove(0,"http://".Length);
try
{
System.Net.IPHostEntry ipHost = System.Net.Dns.Resolve(url);
return true;
}
catch (System.Net.Sockets.SocketException se)
{
System.Diagnostics.Trace.Write(se.Message);
return false;
}
}

//取得输入的URL地址
PageUrl = UrlText.Text;
WebClient wc = new WebClient();
//把已登录的用户或正被模拟的用户的用户凭据赋给用于对向Internet资源的请求进行身份验证的网络凭据
wc.Credentials = CredentialCache.DefaultCredentials;

///方法一:
///从指定的URI下载数据
Byte[] pageData = wc.DownloadData(PageUrl);
//把下载到的字符型数组数据转换成字符串类型
ContentHtml.Text = Encoding.Default.GetString(pageData);

/// 方法二
//为指定的URI打开一个可读的数据流,并定义一个该流的引用
/// Stream resStream = wc.OpenRead(PageUrl);
/// 根据上面定义的数据流,以默认编码的方式定义一个读数据流
/// StreamReader sr = new StreamReader(resStream,System.Text.Encoding.Default);
/// 读取数据流中的内容
/// ContentHtml.Text = sr.ReadToEnd();
/// //关闭数据流
/// resStream.Close();
/// 
//释放资源
wc.Dispose();  

PageUrl = UrlText.Text;
//根据指定的UR建立WEB请求
WebRequest  request = WebRequest.Create(PageUrl);
//定义对上面WEB请求的反应
WebResponse response = request.GetResponse();
//取得WEB响应的数据流
Stream resStream = response.GetResponseStream();
//根据上面定义的数据流,以默认编码的方式定义一个读数据流
StreamReader sr = new StreamReader(resStream, System.Text.Encoding.Default);
// 读取数据流中的内容
ContentHtml.Text = sr.ReadToEnd();
//关闭数据流
resStream.Close();
//关闭读数据流并释放资源
sr.Close();

NetBug–爬虫 V1.02开发笔记

背景

随着Internet的普及,网络信息正以极高的速度增长,在这么多数据中找到自己需要的信息是一件很繁琐的事情,找到需要的信息后如何获取也是件麻烦的事。这就需要Internet信息抓取程序来代替人工的操作。

所谓Internet信息抓取程序,就是程序会按照用户的关键词或关键网站来收集相应的信息,并提供给用户想要的信息格式。

信息量的增加会带来信息网站发布人员工作量的剧增,为实现信息发布系统实现信息自

动发布、减少工作人员工作量、即时跟踪最新信息,就需要自动信息提供程序,因此Internet信息抓取程序应运而生。

目标

实现自定义网站信息分类抓取,存入本地数据库、生成静态页面或其它用户定义的信息结构,并下载与信息相关的多媒体文件。

开发

l 目标站点结构分析

本步骤是准确抓取信息个关键。

首先要选择更新频率高的页面做为抓取地址,然后分析要抓取内容页面url特点。

然后分析要抓取信息页面的元素特性,比如标题位置,内容位置 等,得到定位标记点。

将以上信息写成自己的配置文件或存到数据库中。

每个网站都需要分析,写出单独的配置文件,供抓取程序使用。

l 信息提取

根据配置文件取得要抓取页面url,使用HttpWebRequest类获取内容:

//获取http页面函数

public string Get_Http(string a_strUrl,int timeout)

{

string strResult ;

try

{

HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(a_strUrl) ;

myReq.Timeout = timeout;

HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();

Stream myStream = HttpWResp.GetResponseStream () ;

StreamReader sr = new StreamReader(myStream , Encoding.Default);

StringBuilder strBuilder = new StringBuilder();

while (-1 != sr.Peek())

{

strBuilder.Append(sr.ReadLine()+"\r\n");

}

strResult = strBuilder.ToString();

}

catch(Exception exp)

{

strResult = "错误:" + exp.Message ;

}

return strResult ;

}

获取页面内容后,分析页面中连接地址取到要抓取的url:

//处理页面标题和链接

public string SniffWebUrl( string urlStr,string blockB,string blockE )

{

string urlch1 = "";

string urlch2 = "";

int end_n1 = 0;

int end_nums = 0;

int end_nums1 = 0;

int end_nums2 = 0;

int end_nums3 = 0;

string reUTStr = "";

string reTitle = "";

string ret = "";

try

{

int pos01 = urlStr.IndexOf( "." );

int pos02 = urlStr.LastIndexOf( "/" );

if( pos01 < 0 )

{

return "";

}

if( pos02 < 0 )

{

return "";

}

int pos03 = urlStr.IndexOf( "/",pos01 );

if ( pos03 < 0 )

{

urlch1 = urlStr;

urlch2 = urlStr;

}

else

{

urlch1 = urlStr.Substring( 0,pos03 );

urlch2 = urlStr.Substring( 0,pos02 );

}

string tmpAllStr = new PublicFun().Get_Http( urlStr ,time1);

int pos1 = tmpAllStr.IndexOf( blockB );

int pos2 = tmpAllStr.IndexOf( blockE,pos1 + blockB.Length );

if ( pos1>0 && pos2>0 && pos2>pos1 )

{

ret = tmpAllStr.Substring( pos1 + blockB.Length,pos2 – pos1 – blockB.Length );

ret = ret.Substring( ret.IndexOf( "<" ));

while( ret.IndexOf( "<A" ) >= 0 )

{

ret = ret.Substring( 0,ret.IndexOf( "<A" ) ) + "<a" + ret.Substring( ret.IndexOf( "<A" ) + 2 );

}

while( ret.IndexOf( "</A" ) >=0 )

{

ret = ret.Substring( 0,ret.IndexOf( "</A" ) ) + "</a" + ret.Substring( ret.IndexOf( "</A" ) + 3 );

}

while( ret.IndexOf( "Href=" ) >=0 )

{

ret = ret.Substring( 0,ret.IndexOf( "Href=" )) + "href=" + ret.Substring( ret.IndexOf( "Href=" ) + 5 );

}

while( ret.IndexOf( "HREF=" ) >=0 )

{

ret = ret.Substring( 0,ret.IndexOf( "HREF=" )) + "href=" + ret.Substring( ret.IndexOf( "HREF=" ) + 5 );

}

while( ret.IndexOf( "href=’" ) >=0 )

{

ret = ret.Substring( 0,ret.IndexOf( "href=’" )) + "href=\"" + ret.Substring( ret.IndexOf( "href=’" ) + 6 );

}

}

tmpAllStr = ret;

int begin_nums = tmpAllStr.IndexOf( "href=" );

while ( begin_nums >= 0 )

{

string tmpStrA = "";

string tmpStrB = tmpAllStr.Substring( begin_nums + 5,1 );

if ( tmpStrB == "\"" )

{

end_n1 = begin_nums + 6;

if ( ( end_n1 + 1 ) > tmpAllStr.Length )

{

return "";

}

tmpStrA = tmpAllStr.Substring( begin_nums+6,1 );

}

else

{

end_n1 = begin_nums + 5;

tmpStrA = tmpStrB;

}

if ( tmpStrA == "#" )

{

tmpAllStr = tmpAllStr.Substring( end_n1 );

begin_nums = tmpAllStr.IndexOf( "href=" );

}

else

{

end_nums1 = tmpAllStr.IndexOf( " ",end_n1 );

end_nums2 = tmpAllStr.IndexOf( ">",end_n1 );

end_nums3 = tmpAllStr.IndexOf( "</a",end_nums2 );

if ( ( end_nums3 >= 0 ) && ( end_nums2 >= 0 ) )

{

reTitle = tmpAllStr.Substring( end_nums2 + 1,end_nums3 – end_nums2 – 1 );

if ( end_nums1 > end_nums2 )

{

end_nums = end_nums2;

}

else

{

if ( end_nums1 < 0 )

{

end_nums = end_nums2;

}

else

{

end_nums = end_nums1;

}

}

string str4 = tmpAllStr.Substring( end_nums-1, end_nums – end_nums + 1 );

if ( str4 =="\"" || str4 == "’" )

{

end_nums = end_nums – 1;

}

string sTotalOne = tmpAllStr.Substring( end_n1,end_nums – end_n1 );

if ( sTotalOne.IndexOf( "http://" ) <0 )

{

if ( sTotalOne.IndexOf( "/" ) == 0 )

{

sTotalOne = urlch1 + sTotalOne;

}

else

{

int linshiIntNum = 0;

int flags = 0;

string urlChange = urlStr;;

while( sTotalOne.IndexOf( "../" ) >= 0 )

{

sTotalOne = sTotalOne.Substring( sTotalOne.IndexOf( "../" ) + 3 );

linshiIntNum = linshiIntNum + 1;

flags = flags +1;

}

while( ( urlChange.LastIndexOf( "/" ) >= 0 ) && ( linshiIntNum >= 0 ) )

{

urlChange = urlChange.Substring( 0,urlChange.LastIndexOf( "/" ) );

linshiIntNum = linshiIntNum – 1;

}

if ( flags == 0 )

{

sTotalOne = urlch2 + "/" + sTotalOne;

}

else

{

sTotalOne = urlChange + "/" + sTotalOne;

}

}

}

reUTStr = reUTStr + new PublicFun().RemoveHtmlCode( reTitle ) + sTotalOne;

tmpAllStr = tmpAllStr.Substring( end_nums3 + 4 );

begin_nums = tmpAllStr.IndexOf( "href=" );

}

else

{

begin_nums = -1;

}

}

}

return reUTStr;

}

catch( Exception e)

{

return "";

}

}

得到要抓取内容的url后,处理该页面:

//获取链接内容并分类处理

public string GetWebContent( string gatherUrl,string subUrl,string subTitle,string b_Content,string e_Content,string b_Filter,string e_Filter,string root )

{

string tmpAllStr = "";

string dfStrB = "";

string dfStrE = "";

string rePicStr = "";//图片返回路径

string reContentStr = "";

string picHtml = "images"; //本地图片路径

string urlch1 ="";

string urlch2 ="";

int pos1 = gatherUrl.IndexOf( "." );

int pos2 = gatherUrl.LastIndexOf( "/" );

if( pos1 < 0 )

{

return "";

}

if( pos2 < 0 )

{

return "";

}

int pos3 = gatherUrl.IndexOf( "/",pos1 );

if ( pos3 < 0 )

{

urlch1 = gatherUrl;

urlch2 = gatherUrl;

}

else

{

urlch1 = gatherUrl.Substring( 0,pos3 );

urlch2 = gatherUrl.Substring( 0,pos2 );

}

tmpAllStr = new PublicFun().Get_Http( subUrl,time1 );

//取稿源

string docFromStr = "";

if ( dfStrB != "" && dfStrE != "" )

{

if ( tmpAllStr != "" )

{

int b_docF = tmpAllStr.IndexOf( dfStrB );

if ( b_docF > 0 )

{

int e_docF = tmpAllStr.IndexOf( dfStrE,b_docF + dfStrB.Length );

if ( e_docF > 0 && e_docF > b_docF && e_docF – b_docF < 20 )

{

docFromStr = tmpAllStr.Substring( b_docF + dfStrB.Length, e_docF – b_docF – dfStrB.Length );

}

}

}

}

//取内容

if ( tmpAllStr != "" )

{

int begin_strnum = tmpAllStr.IndexOf( b_Content );

if ( begin_strnum < 0 )

{

return "";

}

int end_strnum = tmpAllStr.IndexOf( e_Content,begin_strnum + b_Content.Length );

if ( end_strnum < 0 )

{

return "";

}

string sTotalSubM = "";

if ( end_strnum > begin_strnum )

{

sTotalSubM = tmpAllStr.Substring ( begin_strnum,end_strnum – begin_strnum );

}

if ( sTotalSubM == "" )

{

return "";

}

//过滤无用信息

int bfnum = sTotalSubM.IndexOf( b_Filter );

if ( bfnum > -1 )

{

int efnum = sTotalSubM.IndexOf( e_Filter,bfnum );

if ( efnum > -1 )

{

if ( efnum > bfnum )

{

sTotalSubM = sTotalSubM.Substring( 0,bfnum ) + sTotalSubM.Substring( efnum + e_Filter.Length );

}

}

}

//格式化图片标记

while( sTotalSubM.IndexOf( "Src=" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "Src=" ) ) + "src=" + sTotalSubM.Substring( sTotalSubM.IndexOf( "Src=" ) + 4 );

}

while( sTotalSubM.IndexOf( "SRC=" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "SRC=" ) ) + "src=" + sTotalSubM.Substring( sTotalSubM.IndexOf( "SRC=" ) + 4 );

}

while( sTotalSubM.IndexOf( "src=’" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "src=’" ) ) + "src=\"" + sTotalSubM.Substring( sTotalSubM.IndexOf( "src=’" ) + 5 );

}

//取图片地址

int end_n12 = 0;

int end_nums2 = 0;

int begin_nums2 = sTotalSubM.IndexOf( "src=" );

while( begin_nums2 >= 0 )

{

String tmpStr = sTotalSubM.Substring( begin_nums2 + 4,1 );

if ( tmpStr == "\"" )

{

end_n12 = begin_nums2 + 5;

}

else

{

end_n12 = begin_nums2 + 4;

}

int end_nums2a = sTotalSubM.IndexOf( " ",end_n12 );

int end_nums2b = sTotalSubM.IndexOf( ">",end_n12 );

if ( end_nums2b < 0 )

{

break;

}

if ( end_nums2a > end_nums2b )

{

end_nums2 = end_nums2b;

}

else

{

if (end_nums2a<0)

{

end_nums2 = end_nums2b;

}

else

{

end_nums2 = end_nums2a;

}

}

tmpStr = sTotalSubM.Substring( end_nums2-1,1 );

if ( tmpStr == "\"" || tmpStr == "’" )

{

end_nums2 = end_nums2 – 1;

}

string tmpPicStr = sTotalSubM.Substring( end_n12,end_nums2 – end_n12 );

if ( tmpPicStr.IndexOf( "http://" ) < 0 )

{

if ( tmpPicStr.IndexOf( "/" ) == 0 )

{

tmpPicStr = urlch1 + tmpPicStr;

}

else

{

int linshiIntNum = 0;

int flags = 0;

string urlChange = subUrl;

while( tmpPicStr.IndexOf( "../" ) >= 0 )

{

tmpPicStr = tmpPicStr.Substring( tmpPicStr.IndexOf("../") + 3 );

linshiIntNum = linshiIntNum + 1;

flags = flags + 1;

}

while( ( urlChange.LastIndexOf( "/" ) >= 0 ) && ( linshiIntNum >= 0 ) )

{

urlChange = urlChange.Substring( 0,urlChange.LastIndexOf( "/" ) );

linshiIntNum = linshiIntNum – 1;

}

if ( flags == 0 )

{

tmpPicStr = urlch2 + "/" + tmpPicStr;

}

else

{

tmpPicStr = urlChange + "/" + tmpPicStr;

}

}

}

//tmpPicStr = tmpPicStr.ToLower();

string tmpPicStrTmp = tmpPicStr.ToLower();

//if ( tmpPicStr.IndexOf( ".jpg" ) > 0 || tmpPicStr.IndexOf( ".gif" ) > 0 || tmpPicStr.IndexOf( ".bmp" ) > 0 )

if ( tmpPicStrTmp.IndexOf( ".jpg" ) > 0 || tmpPicStrTmp.IndexOf( ".gif" ) > 0 || tmpPicStrTmp.IndexOf( ".bmp" ) > 0 )

{

rePicStr = rePicStr + "||" + tmpPicStr ;

int flagN2 = tmpPicStr.LastIndexOf( "/" );

string fileN2 = picHtml + tmpPicStr.Substring( flagN2 );

sTotalSubM = sTotalSubM.Substring( 0,end_nums2 ) + ">******" + fileN2 + "******<" + sTotalSubM.Substring( end_nums2 );

begin_nums2 = sTotalSubM.IndexOf( "src=", end_nums2 + fileN2.Length + 22 );

}

else

{

begin_nums2 = sTotalSubM.IndexOf( "src=", end_nums2 + 4 );

}

}

if ( rePicStr.Length > 2 )

rePicStr = rePicStr.Substring(2);

//内容处理 格式化关键标记

while( sTotalSubM.IndexOf( "<P" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "<P" ) ) + "|****|<" + sTotalSubM.Substring( sTotalSubM.IndexOf( "<P" ) + 2 );

}

while( sTotalSubM.IndexOf( "<p" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "<p" ) ) + "|****|<" + sTotalSubM.Substring( sTotalSubM.IndexOf( "<p" ) + 2 );

}

while( sTotalSubM.IndexOf( "</P" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "</P" ) ) + "|****|<" + sTotalSubM.Substring( sTotalSubM.IndexOf( "</P" ) + 3 );

}

while( sTotalSubM.IndexOf( "</p" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "</p" ) ) + "|****|<" + sTotalSubM.Substring( sTotalSubM.IndexOf( "</p" ) + 3 );

}

while( sTotalSubM.IndexOf( "<br" ) >=0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "<br" ) ) + "+****+<" + sTotalSubM.Substring( sTotalSubM.IndexOf( "<br" ) + 3 );

}

while( sTotalSubM.IndexOf( "<BR" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "<BR" ) ) + "+****+<" + sTotalSubM.Substring( sTotalSubM.IndexOf( "<BR" ) + 3 );

}

while( sTotalSubM.IndexOf( "<Br" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "<Br" ) ) + "+****+<" + sTotalSubM.Substring( sTotalSubM.IndexOf( "<Br" ) + 3 );

}

while( sTotalSubM.IndexOf( "<bR" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "<bR" ) ) + "+****+<" + sTotalSubM.Substring( sTotalSubM.IndexOf( "<bR" ) + 3 );

}

//去除html标记

int linshiInt1 = sTotalSubM.IndexOf( "<" );

int linshiInt2 = sTotalSubM.IndexOf( ">" );

if ( linshiInt2 < linshiInt1 )

{

sTotalSubM = sTotalSubM.Substring( linshiInt2 + 1 );

}

int linshiInt11 = sTotalSubM.LastIndexOf( "<" );

int linshiInt12 = sTotalSubM.LastIndexOf( ">" );

if ( linshiInt12 < linshiInt11 )

{

sTotalSubM = sTotalSubM.Substring( 0,linshiInt12 + 1 );

}

linshiInt1 = sTotalSubM.IndexOf( "<" );

while ( linshiInt1 >= 0 )

{

linshiInt2 = sTotalSubM.IndexOf( ">",linshiInt1 );

if ( linshiInt2 >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,linshiInt1 ) + sTotalSubM.Substring( linshiInt2 + 1 );

}

else

{

sTotalSubM = sTotalSubM.Substring( 0,linshiInt1 );

}

linshiInt1 = sTotalSubM.IndexOf("<");

}

//还原关键标记

int linshiInt3 = 0;

int linshiInt4 = 0;

while( sTotalSubM.IndexOf( "+****+" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "+****+" ) ) + "<br>\n" + sTotalSubM.Substring( sTotalSubM.IndexOf( "+****+" ) + 9 );

}

while( sTotalSubM.IndexOf( "|****|" ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( "|****|" ) ) + "<br>\n" + sTotalSubM.Substring( sTotalSubM.IndexOf( "|****|" ) + 9 );

}

while( sTotalSubM.IndexOf( "******" ) >= 0 )

{

linshiInt3 = sTotalSubM.IndexOf( "******" ) + 9;

linshiInt4 = sTotalSubM.IndexOf( "******",linshiInt3 );

if ( linshiInt4 >= 0 )

{

int tmpPos = sTotalSubM.IndexOf( "******" );

string tmpStr1 = sTotalSubM.Substring( 0,tmpPos );

string tmpStr2 = sTotalSubM.Substring( linshiInt3,linshiInt4 – linshiInt3 );

string tmpStr3 = sTotalSubM.Substring( linshiInt4 + 9 );

sTotalSubM = tmpStr1 + "<img src=" + tmpStr2 + ">" + tmpStr3;

}

else

{

break;

}

}

//去除内容中的标题

if ( sTotalSubM.IndexOf( subTitle ) >= 0 )

{

sTotalSubM = sTotalSubM.Substring( 0,sTotalSubM.IndexOf( subTitle ) ) + sTotalSubM.Substring( sTotalSubM.IndexOf( subTitle ) + subTitle.Length );

}

reContentStr = sTotalSubM;

//调用下载图片功能

//下载图片到指定目录

string[] img_Url = new PublicFun().split( rePicStr,"||" );

for ( int i=0;i<img_Url.Length;i++ )

{

if ( img_Url[i] != "" )

{

new PublicFun().Get_Img( img_Url[i],10000,root + "\\images\\" + img_Url[i].Substring( img_Url[i].LastIndexOf("/")+1 ) );

}

}

}

return reContentStr;

}

以上方法返回要取得的信息,包括标题内容,图片地址等。

下载页面中图片:

//下载图片

public void Get_Img(string a_strUrl,int timeout,string filepath)

{

try

{

HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(a_strUrl) ;

myReq.Timeout = timeout;

HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();

Stream myStream = HttpWResp.GetResponseStream () ;

Bitmap map = new Bitmap( myStream );

PictureBox picB = new PictureBox();

picB.Image = (Image)map;

string path = filepath.Substring( 0,filepath.LastIndexOf( "\\" ) );

if (!Directory.Exists(path))

{

CreateDir( path );

}

picB.Image.Save(filepath);

}

catch(Exception exp)

{

string ss = exp.Message;

WriteLog( filepath.Substring(0,filepath.LastIndexOf("\\")) + "\\error.log",a_strUrl + "–" + ss + "\r\n");

}

}

l 保存文件或入库

上面取得的信息可以按自己的要求保存。

****设计的时候没有使用url按层次循环抓取,这样定义抓取url效率更高,速度更快。

测试程序下载:http://bjfile.focus.cn/file/15379/NetBugV102.rar

如有建议请发送EMail:xiancai@qianlong.com 或msn yutao728@hotmail.com

注:此版本只提供静态文件存储功能,不提供数据库接口,不提供自定义网站功能。

本程序运行需要先安装.net 框架1.1。

2006年09月10日
你是否因为自己的好奇心点击了你的网站上的广告而被迫退出Google Adsense 计划,你是否因为有热心的网友帮助你疯狂的点击广告而导致你被Google Adsense 关闭账户,你是否不小心在你网站的注册页面登录页面放上了广告而同样被Google Adsense 关闭账户,或者其它的导致你被Google Adsense 关闭账户的情况?如果有,看完本文应该可以给你一定帮助。
  我很不幸,以上情况我全部遇到了,从因为好奇点击到莫名关闭,我一共经历了三次账户关闭情况,很郁闷,每一次都有将近30美元的广告费,再加上有人因为点击欺诈将Google告上法庭,我彻底的对Google Adsense死心了,这个我找到了Zanox!
  Zanox是一家来自德国的广告服务商,它的广告主都是一些跨国大公司,例如宝洁(Procter & Gamble),Jamba!,沃达丰(Vodafone),O2,Lycos,Expedia,安联(Allianz),花旗银行(Citibank),安盛(Axa),Sixt,戴姆勒克莱斯勒(DaimlerChrysler)客万乐(Quelle) 和 Staples,还有Dell和联想!
  Zanox的广告方式和Google Adsense不同,不是根据网页相关性自动输出广告,而是相当如一个广告超市,各大企业发布广告合约,由站长自行选择广告商申请合约,合约的申请是直接针对广告商的,合约申请通过后由广告商直接将广告费付给站长,这一点很让人放心!
  通过Zanox发布广告的流程是这样的!首先要注册一个账号,点击这里注册。由于是中文界面,所以注册对大家来说是没有任何问题的!注册成功后你会收到一封确认邮件,[color=Red]点击邮件里面的确认链接[/color],就算正式注册成功了!
  然后你可以通过邮件中的链接登录网站申请广告合约了。登录后,点击网站菜单“项目管理员”,然后点“项目搜索”或者“项目目录”进行合约选择,找到合适的合约,直接点击“给申请”

  [color=Red]如果看到“[/color][color=LimeGreen]你符合所有申请条件[/color][color=Red]”,那么恭喜你,你基本可以通过申请了[/color]

  [color=Red]在打开的页面的底部,钩选“我已经阅读并接受zanox和Shop@CN – your personal shopping portal的条款。”,然后点击“申请”按钮,就完成了申请了,如果你的合约通过,你会收到通知邮件,你就可以开始发布这个合约的广告了![/color]

  [color=Red]在“我的项目”可以查看你申请的合约的情况,比如获取代码、查看统计情况,佣金(广告费)比例,计费方式等,通过与否等等。如果代码链接是灰的不可点,就说明申请还没有通过,只有在等等啦![/color]

  [color=Red]点击“代码”打开当前项目的广告类型列表,再点击“代码”,获取具体的广告显示代码。[/color]

  [color=Red][b]Zanox还有一个非常棒的功能–AdServer–广告服务器,它可以把你申请的全部项目的同规格广告形式进行轮流展示,这样就可以节省对网页空间的占用,而能显示更多的广告内容,确实非常方便,效果可以参加本页顶部!
  点击“建立新的广告服务器”,可以看到下面的界面,可按下图设置好参数,广告服务器服务类型只能选择“AdMedia rotation”。[/b][/color]

  [color=Red]然后点表格下部右边的“继续”,选择你申请的项目。[/color]

  [color=Red]再点表格下部右边的“继续”,系统自动列出所有选定项目符合条件的广告类型,选择你要展示的广告。[/color]

  [color=Red]选好后点“继续”来到广告单元设置页面,进行各广告单元展示时间的设置,这就完成了整个广告服务器的设置了。[/color]

  [color=Red]点击“完成”来到广告服务器列表页面,点击“代码”就可以获得广告代码,将它放到你的网站或邮件中就可以开始获取广告收入了!当然也可以对已有的广告服务进行修改。[/color]

  最后希望广大在Google Adsense 被没收广告费的站长们,能通过Zanox这个各大公司信赖的广告公司挣到更多的广告费,到时记得给我赞助一点哦!现在就加入Zanox吧,点击开始新的广告历程