我在试验用inet 控件 提取网页HTML代码(测试次数非常少,因为是写代码阶段 就是写写代码,测试的时候抓取一次,也就是3次/小时)针对一个网站  
起初是可以的 但是后来应该是被站长 杀掉了(按照访问次数是不可能找到我的,我很好奇,我的访问数远远比正常的浏览器用户少) 我想知道对方是怎么发现我的 同时使采取了什么策略来限制我的访问
我具体的情况是inet1控件执行了 openurl后 返回的是空串 ""
htmlStr = Inet1.OpenURL(website)这个是间歇性的 发生 不知道是为什么 说是被站长限制 也只是我的猜测
    
我看了防爬虫的文章 没有对应到 我遇到的这种情况   使用相同的程序去抓取其他 网站则正常(程序没有问题)   
IE浏览器也可正常访问该目标网站(IP没有受限)

我的inet 的设置
accesstype icusedefault
protocol http
remoteport 80将accesstype 换为icdirect 也不行
有师傅说是如下原因:
很简单,只要对方在必经页上加个 Cookie 处理就可以做这样的识别。
比如说对方设计时决定网页的浏览次序,在先前的某个步骤中或跳转中做了Cookie 处理,
但你的程序因为不是人工操作,可能会跳过某个过程,这样就缺少的Cookie 处理的过程,
对方就很容易识别出哪个是非正常访问页面的IP。
还有就是 inet 控件对 HTTP 协议的 Cookie 支持不是很好的,也很容易产生这样的问题,
建议用 XMLHTTP 对象,这个支持完整的 Cookie 应用。
我的博客里有很多例子都有讲到 XMLHTTP 的,你可以去看看,要不到网上搜索一下也有
很多例子。
但最重要的是要模仿人工浏览过程,不要直接这样操作,不然很容易被发现的,还有就是
注意一些特殊图片和包含页面的访问,有些站长会利用这些地方做识别,我写的网站就经
常这么做。
但是如果像这位师傅说呢那样  应该一直不可以访问呀   可是实际上是  时好时坏
所以我更愿意觉得是 INET对http的cookie支持不是很好   但是这个支持不是很好  具是怎么样的呢
在我理解  INET 、webbrowse控件的底层  都是sock 来实现HTTP协议 我简单的想  既然这个控件用来实现HTTP访问  他应该做的跟  browser 的行为 差不多吧  我觉得就是没有翻译HTML   
    
如果inet和浏览器 真的有差距的话   像上面师傅说的那样尽可能的模仿  浏览器的行为  如何操作呢   比如也产生相应的COOKIE  请求http访问时  也发送本机的COOKIE   或者说  如果指定INET的用户标识   好像每个浏览器都有这样的名字  即使百度的爬虫都有——baiduspider    我是不是也要设置一个     不是很懂   在握手之前  都进行哪些身份验证 我想 既然浏览器可以自如的访问网页  那显然是得到了  HTML  我就是想  不要解释过的HTML页面  直接后台操作html代码
算是爬虫吧  另外我弱弱的想问一下   在web服务器那边  看到我的INET访问  和浏览器访问  有什么不同(是浏览器标识吗,可不可以给INET也搞一个)   他是通过什么看到的  

解决方案 »

  1.   

    又看到你的帖子了,呵呵。
    你要知道浏览器是有缓存的,还有相关配置,包括隐私配置和安全配置,虽然 INET 控件能通过 HTTP 连接访问远程数据,但毕竟是个简单的机制,没有 IE 内核那种强大复杂的机制,因为 INET 控件是独立于 IE 内核外的一个控件而已,而且不会存储这些隐私信息或缓存等信息重复使用,也就导致了 Cookie 会失败的原因,当然,你自己取得所有数据后自己分析 HTTP 头后再自己用内存根据 HTTP 头命令存储或设置 Cookie 数据是可以的,但这样就比较麻烦啦。我说的 XMLHTTP 是比较新的系统对象,它就直接支持这种 Cookie 的运用,相对来说,使用会比 INET 控件更方便,因为它是类,可以动态创建,还不需要担心版本问题。控件使用起来还没这么方便,而且顾虑也多。
    至于如何模仿,最简单的就是你平时用浏览器先访问那个页面,然后再访问那个页面的这种顺序,用 XMLHTTP对象也按照这种方式一个一个访问,这样就不会有那么多问题,用 XMLHTTP,甚至开可以实现模拟登录取数据等操作,用起来会比 INET 控件灵活很多。毕竟 INET 控件是9几年那时的东西,与现在的系统对象比,功能肯定会有点差异的。