------------- 

前言

------------

最近在搞自动登录系统的框架。拿开心网001来实验,可是非常郁闷,我发现开心网的html页面是我所见到的所有页面中最不规范的。

水平之烂,第一次见。在php中夹杂Javascript,javascript有使用了php动态生成变量;在div布局中又嵌入table;json格式乱七八糟,根本没有统一的模型规范。

html标签不应该关闭的关闭,应该关闭的开着,几乎就是混乱。

我实在怀疑kaixin001到底能走多远。在几乎摇摇欲坠的架构上面开发,到底还有多少潜力?

虽然整个kaixin001如此之烂,而更令我惊奇是,无论IE、firefox、chrome依然能够正确的解析页面布局。实在佩服这些html解析器的内核,竟然可以容忍这么垃圾的html布局。

-------------

正文

------------

使用网络蜘蛛,首先必然要对html进行对象化,变成html树,然后再根据 class / id,甚至节点的位置获取自己需要的信息。

可以开心网的html如此之烂,采用标准的html规范解析,一定会崩溃的;既然ie的内核能够正确解析这种html,那么我一定可以进行类似的智能修正操作。

首先看一段kaixin001恶心的html代码,找找其中的问题。

代码

    <div class="dxx_of" id="message7" onmouseover="msgOnmouseover(7)" onmouseout="msgOnmouseout(7)" /> ---------- 问题1:毫无道理的中断
    <div class="dxx1" style="padding: 15px 10px;">
    </div>
    <div class="dxx4">
        <div class="l50_s" id="icon7">
            <a href="/home/?uid=14682889" title="陈晨">
                <img src="http://pic1.kaixin001.com.cn/logo/68/28/50_14682889_24.jpg" width="50"
                    height="50" /></a></div>
        <div style="text-align: center; margin-top: -8px;">
            <a href="/home/?uid=14682889" class="sl" title="陈晨">陈晨</a></div>
    </div>
    <div class="dxx5" style="width: 120px;">
        <div class="c9 f10">
            3月24日</div>
        <div style="display: none; border: 1px solid #EEC0C7; padding: 2px 5px 0 5px; color: #EEC0C7;">
            群发</div>
    </div>
    <div class="dxx6">
        <table width="470" class="aa" border="0" cellpadding="0" cellspacing="0">
            <colgroup>
                <col width="463" />
            </colgroup>
            <tbody>
                <tr basestyle="oRowLine2">
                    <td style="white-space: normal" valign="top" onclick="javascript:clickDirect('/msg/view.php?thread_mid=1871989755&pos=6');">
                        <img onload='_commentImageResize(this,350);' title="微笑" src="http://img1.kaixin001.com.cn/i/face/2.gif">
                        <div>
                            <span class='c9'>共2条会话</span><a href="/msg/view.php?thread_mid=1871989755&pos=6"
                                class="sl">+展开</a></span> -------- 问题2:没有根据的结束符 </div>
                        <span class="c9"></span>
                        <div class="msg_encl" style="display: none;">
                            <img src="http://img.kaixin001.com.cn/i/enclosure.gif" />
                            此消息含有0个附件</div>
                    </td>
                </tr>
            </tbody>
        </table>
    </div>
    <div class="dxx4" style="width: 78px;">
        <div>
            <a class="sl" href="/msg/view.php?thread_mid=1871989755&pos=6" title="查看该消息">查看该消息</a></div>
        <div>
            <a class="sl" href="/msg/view.php?thread_mid=1871989755&pos=6" title="回复该消息">回复该消息</a></div>
        <div>
            <a class="sl" href="/msg/write.php?thread_mid=1871989755" title="转发该消息">转发该消息</a></div>
        <div id="Div6" style="display: none;" title="举报不良短消息">
            <div class="l">
                <a class="sl cp" style="text-decoration: underline;" onclick="javascript:report(14682889,'1871989755');"
                    onmouseover="javascript:$('reportimg').src='http://img.kaixin001.com.cn/i2/tanhao1.gif'"
                    onmouseout="javascript:$('reportimg').src='http://img.kaixin001.com.cn/i2/tanhao.gif'"
                    target="reportspam" title="举报不良短消息">不良短消息</a>&nbsp;</div>
            <div class="l mt5">
                <img id="Img6" onclick="javascript:report(14682889,'1871989755');" onmouseover="this.src='http://img.kaixin001.com.cn/i2/tanhao1.gif'"
                    onmouseout="this.src='http://img.kaixin001.com.cn/i2/tanhao.gif'" src="http://img.kaixin001.com.cn/i2/tanhao.gif"
                    width="14" height="12" alt="举报不良短消息" /></div>
            <div class="c">
            </div>
        </div>
    </div>
    <div class="dxx7" id="delete7">
        <a href="javascript:delThread('1871989755', '0');" title="删除该条消息包含的所有会话">
            <img src="http://img.kaixin001.com.cn/i/close.gif" /></a></div>
    <div class="c">
    </div>
    </div> -------- 问题1:这个应该是开始的div的结束符

还有类似的代码,例如:

<input type=hidden name=id_2 value="9813861"> --------- 没有关上标签
<input type=hidden name=num_2 value="0">
<input type=hidden name=del_2 value="0">

总之,问题数不胜数。我大概列举一下:

1.  标签是否关闭问题

根据html规范,部分标签是不允许有子节点,例如br / hr / input /  img 因此读取到当前节点之后,不会进行嵌套读取。

2.  布局的混乱

在第一个例子里面,

<div class="dxx_of" id="message7" onmouseover="msgOnmouseover(7)" onmouseout="msgOnmouseout(7)"/>

div过早的关闭了,如果按照html规范递推建立节点,则会导致子节点无法正确的建立。解决方法就是,当遇到当前节点是关闭的节点,例如<a xxx />,同时允许带有子节点,则进入递归继续读取。

3. 遇到结束节点

例如第一个例子里面多余的</span>,要解决这种问题,就需要对递归保存递归路径,使用堆栈Stack。当发生递归后,压入当前节点名称到堆栈,所以读取了结束节点,则判断是否在堆栈中出现过,如果没有,自动丢弃。

-------------

结束语

-------------

基本上以上3点,可以处理大部分的html代码了。只是还有一个问题,就是第二点的解决方案。

因为我是默认了可以包含子节点的html标签,忽略关闭记号继续迭代(忽略 />) ,则如果当前节点的确是需要关闭的,那么怎么办??

如果我知道ie的优化算法,估计这个问题可以被解决。

做网络爬虫的人应该占大多数,希望大家给点资料。

转载于:https://www.cnblogs.com/zc22/archive/2010/03/31/1701688.html

谈谈网络蜘蛛 爬开心网001的一些体会相关推荐

  1. 用C#2.0实现网络蜘蛛(WebSpider)

    摘要:本文讨论了如何使用C#2.0实现抓取网络资源的网络蜘蛛.使用这个程序,可以通过一个入口网址(如http: //www.comprg.com.cn)来扫描整个互联网的网址,并将这些扫描到的网址所指 ...

  2. 网络蜘蛛Spider 工作原理

    网络蜘蛛 Web spider (或称 Crawler)是一种能够跟踪网络上超链接结构,并不断进行网络资源发现与采集的程序.作为搜索引擎的资源采集部分,Web  Spider的性能将直接影响到整个搜索 ...

  3. 关于网络蜘蛛以及搜索蜘蛛爬行

    当"蜘蛛"程序出现时,现代意义上的搜索引擎才初露端倪.它实际上是一种电脑"机器人"(Computer Robot),电脑"机器人"是指某个能 ...

  4. 转帖不会乱码的,powershell网络蜘蛛

    抓取(爬取)网上信息的脚本程序,俗称网络蜘蛛. powershell中自带了这样的两个命令,[Invoke-WebRequest]和[Invoke-RestMethod],但这两个命令有时候会乱码. ...

  5. 搜索引擎(网络蜘蛛及搜索引擎基本原理)

    2006-05-25 网络蜘蛛及搜索引擎基本原理 TAG:搜索相关 搜索引擎的工作原理大致可以分为: 搜集信息:搜索引擎的信息搜集基本都是自动的.搜索引擎利用称为网络蜘蛛(spider)的自动搜索机器 ...

  6. 网络爬虫(网络蜘蛛,网络机器人)与Web安全

    网络爬虫概述 网络爬虫(Web Crawler),又称网络蜘蛛(Web Spider)或网络机器人(Web Robot),是一种按照一定的规则自动抓取万维网资源的程序或者脚本,已被广泛应用于互联网领域 ...

  7. NetSpider 网络蜘蛛1.0 的简介

    NetSpider 网络蜘蛛1.0 的简介 支持多线程下载和 自动断点续传.特别适合对网站上的图象文件进行自动下载,是图片 搜集者的利器.详细的使用说明见: 网络蜘蛛是一个自动搜索HTML页面并下载指 ...

  8. 搜索引擎中的网络蜘蛛技术探析

    摘要:搜索引擎技术可以从海量的 网络 信息中获得我们想要的信息,随着网络信息资源的急剧增长其作用越来越显著.本文介绍了搜索引擎技术中的网路蜘蛛,分析了其对文件的处理方法,研究了其搜索与更新策略. 关键 ...

  9. 建立网络链接编程C语言,用C语言编写一个网络蜘蛛来搜索网上出现的电子邮件地址...

    可能大家经常要去互联网上搜索特定的内容,比如收集大量邮件地址,如果用google之类的搜索引擎是没法实现这种特定功能的,所以用C语言来写一个吧.它的功能就是不断去取得网络上的页面,然后分析出网页上出现 ...

  10. 中文搜索引擎技术揭密:网络蜘蛛

    [e800.com.cn 专稿]搜索引擎一直专注于提升用户的体验度,其用户体验度则反映在三个方面:准.全.快.用专业术语讲是:查准率.查全率和搜索速度(即搜索耗时).其中最易达到的是搜索速度,因为对于 ...

最新文章

  1. 转:性能测试中的性能测试指标与用户体验分析
  2. Java基础点——面向对象(中)
  3. django 的ORM
  4. mysql left join两个表,mysql left join 多个表
  5. mysql从节点放家里_添加MySQL 5.6 从节点 Slave
  6. ArcEngine在个人地理数据库下创建要素类
  7. oracle凭证编号,R12 AP模块的发票过账后如何关联对应的凭证编号
  8. matlab遗传算法 系统辨识,基于遗传算法的控制系统的系统辨识
  9. Java关于数字的正则校验
  10. 黑道圣徒3如何去掉马赛克
  11. liang-Barskey算法
  12. python右对齐输出乘法表_python输出九九乘法表
  13. openstack kolla 安装报错
  14. OpenSSL文档阅读笔记-RSA Encryption Decryption Example with OpenSSL in C
  15. 亚马逊个人创业这条路行的通吗?
  16. 自动化办公:1、文件自动化处理邮件批量处理
  17. 达梦数据库:备份 冷备与热备
  18. Java使用itextpdf生成PDF文件,用浏览器下载
  19. matlab saveas使用报错:错误使用 matlab.graphics.internal.name (line 101)
  20. 大陆房价将跌回10年

热门文章

  1. php json_encode不要反斜杠,【json+encode让URL内容斜杠+不转义】
  2. 符号_变压器电路图符号大全
  3. 利器 | REST Assured 实践(二):断言实现
  4. 9.2-Scrapy框架爬虫【进阶】-spiders用法
  5. 大数据压缩处理:数据分卷压缩和分卷压缩解压
  6. python足球作画
  7. Nuvoton M031-时钟树
  8. 家用 NAS 服务器(2)| HyperV的Winserver 2022和Ubuntu 22.04双系统
  9. android 标准时间格式,android开发中关于含有中文字段的格林尼治标准时间的时间格式转换...
  10. mysql truncate分区表_MySQL分区表的管理~1