整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Python小案例77-解析HTML文档

解析HTML文档,可以使用一些编程语言中的HTML解析库或工具。以下是一些常用的方法:

  1. 使用Python中的BeautifulSoup库:BeautifulSoup是一个功能强大的HTML解析库,可以帮助你从HTML文档中提取数据。你可以使用pip安装BeautifulSoup,然后使用它的解析器来解析HTML文档。
from bs4 import BeautifulSoup

# 读取HTML文档
with open('example.html', 'r') as file:
    html = file.read()

# 创建BeautifulSoup对象
soup = BeautifulSoup(html, 'html.parser')

# 使用BeautifulSoup对象提取数据
# 例如,提取所有的链接
links = soup.find_all('a')
for link in links:
    print(link.get('href'))
  1. 使用JavaScript中的DOM解析器:如果你在浏览器环境中,可以使用JavaScript的DOM解析器来解析HTML文档。你可以使用document对象来访问和操作HTML元素。
// 读取HTML文档
var html = document.documentElement.innerHTML;

// 使用DOM解析器提取数据
// 例如,提取所有的链接
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
    console.log(links[i].getAttribute('href'));
}
  1. 使用其他编程语言的HTML解析库:除了Python和JavaScript,还有许多其他编程语言也有自己的HTML解析库,例如Java中的Jsoup、Ruby中的Nokogiri等。你可以根据自己的编程语言选择适合的HTML解析库来解析HTML文档。

无论你选择哪种方法,解析HTML文档的关键是了解HTML的结构和标签,并使用相应的解析器或工具来提取所需的数据。

当你解析HTML文档时,你可能会遇到以下一些常见的任务和技术:

  1. 选择器:使用选择器可以方便地定位和提取HTML文档中的特定元素。例如,你可以使用CSS选择器来选择具有特定类名或ID的元素,或者使用XPath来选择具有特定属性或层次结构的元素。
  2. 提取数据:一旦你定位到了要提取的元素,你可以使用相应的方法或属性来获取元素的文本内容、属性值或其他相关信息。例如,你可以使用getText()方法来获取元素的文本内容,使用getAttribute()方法来获取元素的属性值。
  3. 遍历文档:HTML文档通常是一个树状结构,你可以使用遍历方法来访问和操作文档中的不同元素。例如,你可以使用递归或循环来遍历文档的子元素、父元素或兄弟元素。
  4. 处理嵌套结构:HTML文档中的元素可能会有嵌套的结构,你需要处理这些嵌套关系来正确地提取数据。例如,你可以使用递归方法来处理嵌套的列表、表格或嵌套的div元素。
  5. 处理特殊情况:在解析HTML文档时,可能会遇到一些特殊情况,例如处理动态生成的内容、处理特殊字符或处理错误的HTML结构。你需要根据具体情况选择合适的方法来处理这些特殊情况。

总的来说,解析HTML文档需要一定的HTML知识和编程技巧。你需要了解HTML的结构和标签,选择合适的解析器或工具,使用选择器来定位元素,提取所需的数据,并处理特殊情况。通过不断练习和实践,你将能够更熟练地解析HTML文档并提取所需的数据。

可以使用 HTML 创建表格。

实例

表格

[demo]

<html>

<head>

<meta charset="UTF-8">

</head>

<body>

<p>每个表格由 table 标签开始。</p>

<p>每个表格行由 tr 标签开始。</p>

<p>每个表格数据由 td 标签开始。</p>

<h4>一列:</h4>

<table border="1">

<tr>

<td>100</td>

</tr>

</table>

<h4>一行三列:</h4>

<table border="1">

<tr>

<td>100</td>

<td>200</td>

<td>300</td>

</tr>

</table>

<h4>两行三列:</h4>

<table border="1">

<tr>

<td>100</td>

<td>200</td>

<td>300</td>

</tr>

<tr>

<td>400</td>

<td>500</td>

<td>600</td>

</tr>

</table>

</body>

</html>

[/demo]

这个例子演示如何在 HTML 文档中创建表格。

表格边框

[demo]

<html>

<head>

<meta charset="UTF-8">

</head>

<body>

<h4>带有普通的边框:</h4>

<table border="1">

<tr>

<td>First</td>

<td>Row</td>

</tr>

<tr>

<td>Second</td>

<td>Row</td>

</tr>

</table>

<h4>带有粗的边框:</h4>

<table border="8">

<tr>

<td>First</td>

<td>Row</td>

</tr>

<tr>

<td>Second</td>

<td>Row</td>

</tr>

</table>

<h4>带有很粗的边框:</h4>

<table border="15">

<tr>

<td>First</td>

<td>Row</td>

</tr>

<tr>

<td>Second</td>

<td>Row</td>

</tr>

</table>

</body>

</html>

[/demo]

本例演示各种类型的表格边框。

表格

表格由 <table> 标签来定义。每个表格均有若干行(由 <tr> 标签定义),每行被分割为若干单元格(由 <td> 标签定义)。字母 td 指表格数据(table data),即数据单元格的内容。数据单元格可以包含文本、图片、列表、段落、表单、水平线、表格等等。

<table border="1">

<tr>

<td>row 1, cell 1</td>

<td>row 1, cell 2</td>

</tr>

<tr>

<td>row 2, cell 1</td>

<td>row 2, cell 2</td>

</tr>

</table>

在浏览器显示如下:

row 1, cell 1 row 1, cell 2

row 2, cell 1 row 2, cell 2

表格和边框属性

如果不定义边框属性,表格将不显示边框。有时这很有用,但是大多数时候,我们希望显示边框。

使用边框属性来显示一个带有边框的表格:

<table border="1">

<tr>

<td>Row 1, cell 1</td>

<td>Row 1, cell 2</td>

</tr>

</table>

表格的表头

表格的表头使用 <th> 标签进行定义。

大多数浏览器会把表头显示为粗体居中的文本:

<table border="1">

<tr>

<th>Heading</th>

<th>Another Heading</th>

</tr>

<tr>

<td>row 1, cell 1</td>

<td>row 1, cell 2</td>

</tr>

<tr>

<td>row 2, cell 1</td>

<td>row 2, cell 2</td>

</tr>

</table>

在浏览器显示如下:

Heading Another Heading

row 1, cell 1 row 1, cell 2

row 2, cell 1 row 2, cell 2

表格中的空单元格

在一些浏览器中,没有内容的表格单元显示得不太好。如果某个单元格是空的(没有内容),浏览器可能无法显示出这个单元格的边框。

<table border="1">

<tr>

<td>row 1, cell 1</td>

<td>row 1, cell 2</td>

</tr>

<tr>

<td></td>

<td>row 2, cell 2</td>

</tr>

</table>

表格中的空单元格

注意:这个空的单元格的边框没有被显示出来。为了避免这种情况,在空单元格中添加一个空格占位符,就可以将边框显示出来。

<table border="1">

<tr>

<td>row 1, cell 1</td>

<td>row 1, cell 2</td>

</tr>

<tr>

<td>&nbsp;</td>

<td>row 2, cell 2</td>

</tr>

</table>

在浏览器中显示如下:

row 1, cell 1 row 1, cell 2

row 2, cell 2

更多实例

没有边框的表格

[demo]

<html>

<head>

<meta charset="UTF-8">

</head>

<body>

<h4>这个表格没有边框:</h4>

<table>

<tr>

<td>100</td>

<td>200</td>

<td>300</td>

</tr>

<tr>

<td>400</td>

<td>500</td>

<td>600</td>

</tr>

</table>

<h4>这个表格也没有边框:</h4>

<table border="0">

<tr>

<td>100</td>

<td>200</td>

<td>300</td>

</tr>

<tr>

<td>400</td>

<td>500</td>

<td>600</td>

</tr>

</table>

</body>

</html>

[/demo]

本例演示一个没有边框的表格。

表格中的表头(Heading)

[demo]

<html>

<head>

<meta charset="UTF-8">

</head>

<body>

<h4>表头:</h4>

<table border="1">

<tr>

<th>姓名</th>

<th>电话</th>

<th>电话</th>

</tr>

<tr>

<td>Bill Gates</td>

<td>555 77 854</td>

<td>555 77 855</td>

</tr>

</table>

<h4>垂直的表头:</h4>

<table border="1">

<tr>

<th>姓名</th>

<td>Bill Gates</td>

</tr>

<tr>

<th>电话</th>

<td>555 77 854</td>

</tr>

<tr>

<th>电话</th>

<td>555 77 855</td>

</tr>

</table>

</body>

</html>

[/demo]

本例演示如何显示表格表头。

空单元格

[demo]

<html>

<head>

<meta charset="UTF-8">

</head>

<body>

<table border="1">

<tr>

<td>Some text</td>

<td>Some text</td>

</tr>

<tr>

<td></td>

<td>Some text</td>

</tr>

</table>

<p>正如您看到的,其中一个单元没有边框。这是因为它是空的。在该单元中插入一个空格后,仍然没有边框。</p>

<p>我们的技巧是在单元中插入一个 no-breaking 空格。</p>

<p>no-breaking 空格是一个字符实体。如果您不清楚什么是字符实体,请阅读关于字符实体的章节。</p>

<p>no-breaking 空格由和号开始 ("&"),然后是字符"nbsp",并以分号结尾(";")。</p>

</body>

</html>

[/demo]

本例展示如何使用 "&nbsp;" 处理没有内容的单元格。

带有标题的表格

[demo]

<html>

<head>

<meta charset="UTF-8">

</head>

<body>

<h4>这个表格有一个标题,以及粗边框:</h4>

<table border="6">

<caption>我的标题</caption>

<tr>

<td>100</td>

<td>200</td>

<td>300</td>

</tr>

<tr>

<td>400</td>

<td>500</td>

<td>600</td>

</tr>

</table>

</body>

</html>

[/demo]

本例演示一个带标题 (caption) 的表格

跨行或跨列的表格单元格

[demo]

<html>

<head>

<meta charset="UTF-8">

</head>

<body>

<h4>横跨两列的单元格:</h4>

<table border="1">

<tr>

<th>姓名</th>

<th colspan="2">电话</th>

</tr>

<tr>

<td>Bill Gates</td>

<td>555 77 854</td>

<td>555 77 855</td>

</tr>

</table>

<h4>横跨两行的单元格:</h4>

<table border="1">

<tr>

<th>姓名</th>

<td>Bill Gates</td>

</tr>

<tr>

<th rowspan="2">电话</th>

<td>555 77 854</td>

</tr>

<tr>

<td>555 77 855</td>

</tr>

</table>

</body>

</html>

[/demo]

本例演示如何定义跨行或跨列的表格单元格。

表格内的标签

[demo]

<html>

<head>

<meta charset="UTF-8">

</head>

<body>

<table border="1">

<tr>

<td>

<p>这是一个段落。</p>

<p>这是另一个段落。</p>

</td>

<td>这个单元包含一个表格:

<table border="1">

<tr>

<td>A</td>

<td>B</td>

</tr>

<tr>

<td>C</td>

<td>D</td>

</tr>

</table>

</td>

</tr>

<tr>

<td>这个单元包含一个列表:

<ul>

<li>苹果</li>

<li>香蕉</li>

<li>菠萝</li>

</ul>

</td>

<td>HELLO</td>

</tr>

</table>

</body>

</html>

[/demo]

本例演示如何显示在不同的元素内显示元素。

单元格边距(Cell padding)

[demo]

<html>

<head>

<meta charset="UTF-8">

</head>

<body>

<h4>没有 cellpadding:</h4>

<table border="1">

<tr>

<td>First</td>

<td>Row</td>

</tr>

<tr>

<td>Second</td>

<td>Row</td>

</tr>

</table>

<h4>带有 cellpadding:</h4>

<table border="1"

cellpadding="10">

<tr>

<td>First</td>

<td>Row</td>

</tr>

<tr>

<td>Second</td>

<td>Row</td>

</tr>

</table>

</body>

</html>

[/demo]

本例演示如何使用 Cell padding 来创建单元格内容与其边框之间的空白。

单元格间距(Cell spacing)

[demo]

<html>

<head>

<meta charset="UTF-8">

</head>

<body>

<h4>没有 cellspacing:</h4>

<table border="1">

<tr>

<td>First</td>

<td>Row</td>

</tr>

<tr>

<td>Second</td>

<td>Row</td>

</tr>

</table>

<h4>带有 cellspacing:</h4>

<table border="1"

cellspacing="10">

<tr>

<td>First</td>

<td>Row</td>

</tr>

<tr>

<td>Second</td>

<td>Row</td>

</tr>

</table>

</body>

</html>

[/demo]

本例演示如何使用 Cell spacing 增加单元格之间的距离。

向表格添加背景颜色或背景图像

[demo]

<html>

<head>

<meta charset="UTF-8">

</head>

<body>

<h4>背景颜色:</h4>

<table border="1"

bgcolor="red">

<tr>

<td>First</td>

<td>Row</td>

</tr>

<tr>

<td>Second</td>

<td>Row</td>

</tr>

</table>

<h4>背景图像:</h4>

<table border="1"

background="./imagecopy1234567890/test.gif">

<tr>

<td>First</td>

<td>Row</td>

</tr>

<tr>

<td>Second</td>

<td>Row</td>

</tr>

</table>

</body>

</html>

[/demo]

本例演示如何向表格添加背景。

向表格单元添加背景颜色或者背景图像

[demo]

<html>

<head>

<meta charset="UTF-8">

</head>

<body>

<h4>单元背景:</h4>

<table border="1">

<tr>

<td bgcolor="red">First</td>

<td>Row</td>

</tr>

<tr>

<td

background="./imagecopy1234567890/test.gif">

Second</td>

<td>Row</td>

</tr>

</table>

</body>

</html>

[/demo]

本例演示如何向一个或者更多表格单元添加背景。

在表格单元中排列内容

[demo]

<html>

<head>

<meta charset="UTF-8">

</head>

<body>

<table width="400" border="1">

<tr>

<th align="left">消费项目....</th>

<th align="right">一月</th>

<th align="right">二月</th>

</tr>

<tr>

<td align="left">衣服</td>

<td align="right">1.10</td>

<td align="right">.20</td>

</tr>

<tr>

<td align="left">化妆品</td>

<td align="right">.00</td>

<td align="right">.45</td>

</tr>

<tr>

<td align="left">食物</td>

<td align="right">0.40</td>

<td align="right">0.00</td>

</tr>

<tr>

<th align="left">总计</th>

<th align="right">01.50</th>

<th align="right">4.65</th>

</tr>

</table>

</body>

</html>

[/demo]

本例演示如何使用 "align" 属性排列单元格内容,以便创建一个美观的表格。

框架(frame)属性

[demo]

<html>

<head>

<meta charset="UTF-8">

</head>

<body>

<p><b>注释:</b>frame 属性无法在 Internet Explorer 中正确地显示。</p>

<p>Table with frame="box":</p>

<table frame="box">

<tr>

<th>Month</th>

<th>Savings</th>

</tr>

<tr>

<td>January</td>

<td>0</td>

</tr>

</table>

<p>Table with frame="above":</p>

<table frame="above">

<tr>

<th>Month</th>

<th>Savings</th>

</tr>

<tr>

<td>January</td>

<td>0</td>

</tr>

</table>

<p>Table with frame="below":</p>

<table frame="below">

<tr>

<th>Month</th>

<th>Savings</th>

</tr>

<tr>

<td>January</td>

<td>0</td>

</tr>

</table>

<p>Table with frame="hsides":</p>

<table frame="hsides">

<tr>

<th>Month</th>

<th>Savings</th>

</tr>

<tr>

<td>January</td>

<td>0</td>

</tr>

</table>

<p>Table with frame="vsides":</p>

<table frame="vsides">

<tr>

<th>Month</th>

<th>Savings</th>

</tr>

<tr>

<td>January</td>

<td>0</td>

</tr>

</table>

</body>

</html>

[/demo]

本例演示如何使用 "frame" 属性来控制围绕表格的边框。

表格标签

表格 描述

<table> 定义表格

<caption> 定义表格标题。

<th> 定义表格的表头。

<tr> 定义表格的行。

<td> 定义表格单元。

<thead> 定义表格的页眉。

<tbody> 定义表格的主体。

<tfoot> 定义表格的页脚。

<col> 定义用于表格列的属性。

<colgroup> 定义表格列的组。

用JavaScript访问和操作的HTML DOM对象的例子。

Document 对象

  • 使用 document.write() 输出文本

  • 使用 document.write() 输出 HTML

  • 返回文档中锚的数目

  • 返回文档中第一个锚的 innerHTML

  • 返回文档中表单的数目

  • 返回文档中第一个表单的名字

  • 返回文档中的图像数

  • 返回文档中第一个图像的ID

  • 返回文档中的链接数

  • 返回文档中的第一个链接的ID

  • 返回文档中的所有cookies的名称/值对

  • 返回加载的文档的服务器域名

  • 返回文档的最后一次修改时间

  • 返回加载的当前文档的URL

  • 返回文档的标题

  • 返回文档的完整的URL

  • 打开输出流,向流中输入文本

  • write() 和 writeln()的不同

  • 用指定的ID弹出一个元素的innerHTML

  • 用指定的Name弹出元素的数量

  • 用指定的tagname弹出元素的数量

Anchor 对象

  • 返回和设置链接的charset属性

  • 返回和设置链接的href属性

  • 返回和设置链接的hreflang属性

  • 返回一个锚的名字

  • 返回当前的文件和链接的文档之间的关系

  • 改变链接的target属性

  • 返回一个链接的type属性的值

Area 对象

  • 返回图像映射某个区域的替代文字

  • 返回图像映射某个区域的坐标

  • 返回一个区域的href属性的锚部分

  • 返回的主机名:图像映射的某个区域的端口

  • 返回图像映射的某个区域的hostname

  • 返回图像映射的某个区域的port

  • 返回图像映射的某个区域的href

  • 返回图像映射的某个区域的pathname

  • 返回图像映射的某个区域的protocol

  • 返回一个区域的href属性的querystring部分

  • 返回图像映射的某个区域的shape

  • 返回图像映射的某个区域的target的值

Base 对象

  • 返回页面上所有相对URL的基URL

  • 返回页面上所有相对链接的基链接

Button 对象

  • 当点击完button不可用

  • 返回一个button的name

  • 返回一个button的type

  • 返回一个button的value

  • 返回一个button所属表的ID

Form 对象

  • 返回一个表单中所有元素的value

  • 返回一个表单acceptCharset属性的值

  • 返回一个表单action属性的值

  • 返回表单中的enctype属性的值

  • 返回一个表单中元素的数量

  • 返回发送表单数据的方法

  • 返回一个表单的name

  • 返回一个表单target属性的值

  • 重置表单

  • 提交表单

Frame/IFrame 对象

  • 对iframe排版

  • 改变一个包含在iframe中的文档的背景颜色

  • 返回一个iframe中的frameborder属性的值

  • 删除iframe的frameborder

  • 改变iframe的高度和宽度

  • 返回一个iframe中的longdesc属性的值

  • 返回一个iframe中的marginheight属性的值

  • 返回一个iframe中的marginwidth属性的值

  • 返回一个iframe中的name属性的值

  • 返回和设置一个iframe中的scrolling属性的值

  • 改变一个iframe的src

Image 对象

  • 对image排版

  • 返回image的替代文本

  • 给image加上border

  • 改变image的高度和宽度

  • 设置image的hspace和vspace属性

  • 返回image的longdesc属性的值

  • 创建一个链接指向一个低分辨率的image

  • 返回image的name

  • 改变image的src

  • 返回一个客户端图像映射的usemap的值

Event 对象

  • 哪个鼠标键被点击了?

  • 被按下的键盘键的keycode?

  • 鼠标的坐标?

  • 鼠标相对于屏幕的坐标?

  • shift键被按下了吗?

  • 哪个元素被按下了?

  • 哪个事件发生了?

Option 和 Select 对象

  • 禁用和启用下拉列表

  • 获得有下拉列表的表单的ID

  • 获得下拉列表的选项数量

  • 将下拉列表变成多行列表

  • 在下拉列表中选择多个选项

  • 弹出下拉列表中所有选项

  • 弹出下拉列表中被选中的选项的索引

  • 改变下拉列表中被选中的选项的文本

  • 删除下拉列表中的选项

Table, TableHeader, TableRow, TableData 对象

  • 改变表格边框的宽度

  • 改变表格的cellpadding和cellspacing

  • 指定表格的frame

  • 为表格指定规则

  • 一个行的innerHTML

  • 一个单元格的innerHTML

  • 为表格创建一个标题

  • 删除表格中的行

  • 添加表格中的行

  • 添加表格行中的单元格

  • 单元格内容水平对齐

  • 单元格内容垂直对齐

  • 对单个单元格的内容水平对齐

  • 对单个单元格的内容垂直对齐

  • 改变单元格的内容

  • 改变单元格横跨的列数(colspan属性)