DOM技术(二)

一.样式编程
1.页面中的每一个元素都具有一个style对象,此对象管理元素的CSS样式。这是在IE4.0引入的,后来作为DOM标准被接受。使用方法:
var oDiv=document.getElementById("div1");
alert(oDiv.style.backgroundColor);
style对象拥有一个cssText属性,返回描述元素样式的CSS字符串。

2.样式对象style的方法(IE6并不支持这些方法):
(1) getPropertyValue(propertyName)——返回CSS特性propertName的字符串值,比如 this.style.getPropertyValue("background-color");这里的propertyName必须按照CSS的样式定义。

(2)getPropertyPriority()——返回important字符串或者为空
(3)item(index)——返回给定索引处的CSS特性名称
(4)removeProperty(propertyName)——移除某CSS特性
(5)setProperty(propertyName,value,priorty)——按照执行优先级设定CSS特性的值

3.通过隐藏层实现自定义鼠标提示的例子:
<html>
    <head>
        <title>Style Example</title>
          <script type="text/javascript" src="detect.js"></script>
        <script type="text/javascript" src="eventutil.js"></script>
        <script type="text/javascript">
            function showTip() {
                var oDiv = document.getElementById("divTip1");
                 oDiv.style.visibility = "visible";
                var oEvent=EventUtil.getEvent();
                 oDiv.style.left = oEvent.clientX + 5;
                 oDiv.style.top = oEvent.clientY + 5;
             }

            function hideTip() {
                var oDiv = document.getElementById("divTip1");
                var oEvent=EventUtil.getEvent();
                 oDiv.style.visibility = "hidden";
             }
        </script>
    </head>
    <body>
        <p>Move your mouse over the red square.</p>
        <div id="div1"
              style="background-color: red; height: 50px; width: 50px"
              onmouseover="showTip()" onmouseout="hideTip()"></div>

         <div id="divTip1"
               style="background-color: yellow; position: absolute; visibility: hidden; padding: 5px">
            <span style="font-weight: bold">Custom Tooltip</span><br />
             More details can go here.
         </div>
    </body>
</html>

这里使用了我在《javascript事件模型框架》中摘记的JS文件。实现可折叠区域的道理与此相同,很常用的功能,不再细说。

4.访问样式表,因为style对象只能访问一个元素的CSS样式,而对于<style/>定义的或者外部CSS文件定义的CSS规则没办法访问,这就引出了如何访问样式表的问题。我们可以通过下面的方式访问:
var cssRules=document.styleSheets[0].cssRules||document.styleSheets[0].rules;

document.styleSheets返回页面上所有样式表的引用,标准DOM中规定每个样式表的规则集合叫cssRules,而IE中叫rules,所以我们用上面的表达式来处理浏览器兼容问题。一个访问的例子:
<html>
    <head>
        <title>Accessing Style Sheets Example</title>
        <style type="text/css">
             div.special {
                 background-color: red;
                 height: 10px;
                 width: 10px;
                 margin: 10px;
            }
        </style>
        <script type="text/javascript">
            function changeBackgroundColor() {
                var oCSSRules = document.styleSheets[0].cssRules || document.styleSheets[0].rules;
                 oCSSRules[0].style.backgroundColor = "blue";
             }
        </script>
    </head>
    <body>
        <div id="div1" class="special"></div>
        <div id="div2" class="special"></div>
        <div id="div3" class="special"></div>
       
        <input type="button" value="Change Background Color" onclick="changeBackgroundColor()" />
    </body>
</html>

点击按钮时将三个div的背景色都设置为蓝色。

5.最终样式:顾名思义,就是样式规则(外部定义和内联的)综合计算之后呈现给用户的样式信息,用来告诉我们元素最终是如何显示在屏幕上的。IE和标准的DOM也有区别:
(1)IE中的最终样式称为currentStyle对象,与style对象不同的是它是只读的,你只能读而不能给它赋值。
(2)DOM中的最终样式,通过document.defaultView.getComputedStyle(元素对象,伪元素对象或者null)方法获得

二.innerHTML和innerText
很常用的功能,特别是在AJAX应用中,经常采用的手段是从服务端返回一小段HTML代码,通过innerHTML嵌入某个层当中来动态显示下拉框等。一个比较常见的用法:
oDiv.innertText=oDiv.innerText;
表示从指定元素中删除所有的HTML标签。

三.outerText和outerHTML

与innerHTML和innerText,不过替换的是整个目标节点,仅在IE和opera中支持此特性

四.范围
叫选区也许更为恰当,range用来选择文档的某个部分而不管节点的边界。也有两种的范围实现:DOM和IE的
1.DOM的range
(1)在DOM中创建选区的方法:
var supportDOMRange=document.implementation.hasFeature("Range","2.0");
if(supportDOMRange)
   var oRange=document.createRange();
先判断是否支持DOM,然后使用createRange()方法创建范围

(2)简单选区
考虑下面的代码:
<p id="p1"><b>hello</b>world</p>
我们通过下面的JS代码来访问上面这段代码:
var oRange1=document.createRange();
var oRange2=document.createRange();
var op1=document.getElementById("p1");
oRange1.selectNode(op1);
oRange2.selectNodeContents(op1);
两个范围,通过selectNode和selectNodeContents方法来选区,有什么不同呢?oRange1选中的范围包括<p/>节点以及它的全部子节点,而oRange2只包含op1的子节点和文本节点(就是"<b>hello</b>world")。

<think>嗯,用户让我介绍一下DOM技术网页清洗,首先我需要确认自己对DOM的理解是否正确。DOM即文档对象模型,它将网页文档表示为树形结构,每个节点都是一个对象,这样程序就能通过DOM API来访问和操作页面内容。 接下来是网页清洗,也就是从网页中提取所需数据的过程。传统方法可能用正则表达式,但DOM技术更高效和准确,尤其是处理结构复杂的网页。比如,用JavaScriptDOM方法或者Python的BeautifulSoup库来定位元素。 然后,我应该分步骤解释DOM技术如何进行网页清洗。第一步是获取网页内容,可能需要用请求库下载HTML,或者用无头浏览器处理动态加载的内容。第步是解析HTML,构建DOM树,这里可以提到不同的解析器,比如lxml或html.parser。第三步是用选择器定位元素,比如getElementById、getElementsByClassName,或者更高级的XPath和CSS选择器。第四步是提取数据,比如获取元素的文本、属性,或者处理嵌套结构。第五步是数据清洗,去除无关字符,转换格式等。最后是存储数据,保存为CSV、JSON或数据库。 还需要比较DOM技术和正则表达式的优缺点,强调DOM在处理复杂结构时的优势,比如可维护性和准确性。同时,可能提到动态网页的挑战,需要用Selenium或Playwright这样的工具。 要注意用户可能需要示例,比如用BeautifulSoup或JavaScript的代码片段,但用户没有明确要求代码,所以可能不需要具体写出来,但可以提到常用工具。另外,确保使用中文,术语正确,结构清晰,分点说明。 最后检查是否有遗漏,比如反爬虫机制的处理,或者数据存储后的应用场景。但用户主要问的是介绍,所以保持概述性质,不需要太深入细节。确保按照系统指令正确使用LaTeX格式,不过这个问题可能不涉及数学公式,所以可能不需要用到。但如果有变量或例子需要,要正确应用$...$或$$...$$,比如提到算法复杂度时用$O(n)$,但这里可能不需要。</think>DOM技术网页清洗是一种基于文档对象模型(Document Object Model,简称DOM)的结构化数据提取方法,主要用于从网页中高效、精准地获取目标信息。以下是分步介绍: --- ### 一、DOM技术基础 1. **DOM概念** DOM将网页文档解析为**树形结构**,每个HTML标签、属性、文本等均视为节点(Node)。 - 根节点:`<html>`标签 - 父子关系:如`<div>`包含`<p>` - 兄弟关系:并列的`<li>`标签 2. **DOM操作接口** 通过JavaScript或解析库(如Python的BeautifulSoup)调用DOM API,例如: - `getElementById()`:通过ID定位元素 - `querySelector()`:使用CSS选择器查找节点 --- ### 、网页清洗核心步骤 1. **获取网页内容** - 静态页面:通过HTTP请求(如Python的`requests`库)下载HTML源码。 - 动态页面:使用无头浏览器(如Selenium、Playwright)渲染JavaScript生成的内容。 2. **解析DOM树** 将HTML源码转换为可操作的DOM对象: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') # 构建DOM树 ``` 3. **定位目标元素** 使用选择器精准定位数据位置: - **CSS选择器**:`soup.select('div.content > p.text')` - **XPath**:`//div[@class="price"]/span/text()` - **属性过滤**:`find_all('a', href=True)` 4. **提取与清洗数据** - 文本提取:`element.get_text()` - 属性提取:`element['href']` - 数据规范化:去除空格(`strip()`)、正则表达式过滤噪声。 5. **存储结果** 将清洗后的数据保存为结构化格式(如CSV、JSON或数据库)。 --- ### 三、DOM技术的优势 1. **结构化处理** 直接利用HTML层级关系,避免正则表达式匹配复杂嵌套内容。 2. **动态兼容性** 配合无头浏览器可抓取JavaScript动态渲染的页面。 3. **可维护性** 基于语义化标签(如class、id)定位元素,代码易读且适应页面小幅改动。 --- ### 四、典型应用场景 1. **电商价格监控**:提取商品名称、价格。 2. **新闻聚合**:抓取文章标题、正文。 3. **舆情分析**:收集社交媒体评论。 --- ### 五、注意事项 1. **反爬机制**:需处理IP封锁、验证码等。 2. **页面结构变化**:定期更新选择器逻辑。 3. **性能优化**:减少DOM遍历层级,避免频繁I/O操作。 通过结合DOM技术与自动化工具,网页清洗可实现高精度、大规模的数据采集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值