当前位置:首页 » 操作系统 » html源码解析

html源码解析

发布时间: 2025-01-15 19:01:10

python爬虫:HTML网页解析方法小结

要理解python是如何解析网页的,首先要理解什么是网页解析器。

简单的说就是用来解析html网页的工具,准确的说:它是一个HTML网页信息提取工具,就是从html网页中解析提取出“我们需要的有价值的数据”或者“新的URL链接”的工具。

解析HTML:

我们知道爬虫的原理无非是把目标网址的内容下载下来存储到内存中,这个时候它的内容其实是一堆HTML,然后再对这些HTML内容进行解析,按照自己的想法提取出想要的数据。

今天主要讲讲Python中解析网页HTML内容的四种方法:

其中BeautifulSoup和XPath是python中解析网页常用的两个库,对于新手来说是利器,零基础小白建议先打好Python基础再去上手爬虫会容易一些。

“零基础如何学Python”在知乎看到过一篇比较好的问答贴,讲的很实用,大家伙可以移步去看看,链接分享在下方。

1、BeautifulSoup

大名鼎鼎的BeautifulSoup库,在Pyhton的HTML解析库里属于重量级的库。

安装途径:

解析的第一步,是构建一个BeautifulSoup对象。

第二个参数表示解析器,BeautifulSoup支持以下多种解释器:

BeautifulSoup对应一个HTML/XML文档的全部内容;

BeautifulSoup类的基本元素

任何存在于HTML语法中的标签都可以用soup.访问获得,当HTML文档中存在多个相同对应内容时,soup.返回第一个。

每个都有自己的名字,通过.name获取,字符串类型 Tag的attrs:一个可以有0或多个属性,字典类型 NavigableString可以跨越多个层次

1)访问标签

通过点号操作符,可以直接访问文档中的特定标签,示例:

这样的方式每次只会返回文档中的第一个标签,对于多个标签,则通过find_all方法返回多个标签构成的列表。

还可以在find方法中添加过滤条件,更加精确的定位元素。

2)访问标签内容和属性

通过name和string可以访问标签的名字和内容,通过get和中括号操作符则可以访问标签中的属性和值。

结合定位元素和访问属性的方法,可以方便快捷的提取对应元素,提高解析html的便利性。

使用Beautiful Soup库解析网页

BeautifulSoup解析内容同样需要将请求和解析分开,从代码清晰程度来讲还将就,不过在做复杂的解析时代码略显繁琐,总体来讲用起来还不错,看个人喜好吧。

爬虫的基本技能最重要的两点:如何抓取数据?如何解析数据?我们要活学活用,在不同的时候利用最有效的工具去完成我们的目的。

工具是其次,学习不要主末颠倒了,我上面分享的那篇文章也有提到过这个问题(链接有放在下方),要明确你学习的最终目的是什么?

2、lxml的XPath

lxml这个库同时支持HTML和XML的解析,支持XPath解析方式,解析效率挺高,不过我们需要熟悉它的一些规则语法才能使用。

使用xpath需要从lxml库中导入etree模块,还需要使用HTML类对需要匹配的HTML对象进行初始化。

安装途径:

Xpath常用表达式

使用表达式定位head和title节点

Xpath谓语常用的表达式

使用谓语定位head和ul节点

定位并获取title节点内的文本内容

提取ul节点下的所有文本文件和链接地址

XPath的解析语法稍显复杂,不过熟悉了语法的话也不失为一种优秀的解析手段。

示例:

3、requests-html

我们知道 requests 只负责网络请求,不会对响应结果进行解析,因此可以把 requests-html 理解为可以解析 HTML 文档的 requets 库。

requests-html 的代码量非常少,都是基于现有的框架进行二次封装,开发者使用时可更方便调用,它依赖于 PyQuery、requests、lxml 等库。

安装途径:

需要注意的是这个库目前只支持python3.6版本;

requests-html 具有以下特性:

requests-html默认使用session保持的请求方式,且其返回内容是一个带有丰富方法的对象。

获取一个随机User-Agent

不用每次在请求头里面去复制user-agent;

对JavaScript的支持是requests-html最大的亮点,会用到render函数,需要注意的是第一次使用这个方法,它会先下载Chromium,然后使用Chromium来执行代码,但是下载的时候可能需要一个梯子,这里就先不展开讨论了。

学过requests库的看到requests-html的api应该会很熟悉,使用方法基本一致,不同的是使用requests编写爬虫时,要先把网页爬取下来,然后再交给BeautifulSoup等一些html解析库,现在可以直接解析了。

示例:

通过简短的几行代码,就可以把整个首页的文章抓取下来。

示例中使用的几个方法:

① find( ) 可以接收两个参数:

第一个参数可以是class名称或ID第二个参数first=True时,只选取第一条数据

② text 获取元素的文本内容

③ attrs 获取元素的属性,返回值是个字典

④ html 获取元素的html内容

使用requests-html来解析内容的好处在于作者都高度封装过了,连请求返回内容的编码格式转换也自动做了,完全可以让代码逻辑更简单直接,更专注于解析工作本身。

4、正则表达式

正则表达式通常被用来检索、替换那些符合某个模式的文本,所以我们可以利用这个原理来提取我们想要的信息。

使用正则表达式, 需要导入re模块,该模块为Python提供了完整的正则表达式功能。

严格的字符匹配示例:

注意:python只支持re模块进行正则表达式的书写

使用正则表达式查找网页内容中的title内容:

使用正则表达式无法很好的定位特定节点并获取其中的链接和文本内容,而使用Xpath和Beautiful Soup能较为便利的实现这个功能。

正则就是编写麻烦,理解不容易,但是匹配效率很高,不过现在有很多现成的HTMl内容解析库之后,不太推荐再手动用正则来对内容进行匹配了,麻烦费时费力。

5、小结:

(1)正则表达式匹配不推荐,因为已经有很多现成的库可以直接用,不需要我们去大量定义正则表达式,还没法复用,尝试过正则表达式的小白就能体会,使用正则表达式来筛选网页内容是有多费劲,而且总是感觉效果不太好。

(2)BeautifulSoup是基于DOM的方式,简单的说就是会在解析时把整个网页内容加载到DOM树里,内存开销和耗时都比较高,处理海量内容时不建议使用。

BeautifulSoup不需要结构清晰的网页内容,因为它可以直接找到我们想要的标签,如果对于一些HTML结构不清晰的网页,它比较适合。

(3)XPath是基于SAX的机制来解析,不会像BeautifulSoup去加载整个内容到DOM里,而是基于事件驱动的方式来解析内容,更加轻巧。

不过XPath要求网页结构需要清晰,而且开发难度比DOM解析的方式高一点,推荐在需要解析效率时使用。

(4)requests-html 是比较新的一个库,高度封装且源码清晰,它直接整合了大量解析时繁琐复杂的操作,同时支持DOM解析和XPath解析两种方式,灵活方便,可以尝试。

除了以上介绍到几种网页内容解析方式之外还有很多解析手段,这里就暂不一一介绍了。

② 什么是HTML源码

HTML是用来做网站的一种语言哈、这样吧、你打开一个网页、然后再网页任何一个地方点击鼠标右键、然后选择“查看源文件”、点击过后将以记事本的形式打开、里面的就全是HTML代码哈、看看吧、希望对你有所帮助!至于怎么使用这个就有专门的教程了哈、你到网络文库里面找找教程嘛

③ html加密解密代码

<HTML><HEAD><TITLE>纯真过往-方宁 - 加密/解密HTML源代码</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META content="script,windows" name=keywords>
<STYLE>.tablinks A {COLOR: blue}
.tablinks A:visited { COLOR: blue}
.tablinks A:hover {COLOR: brown}
input{ font-family: Tahoma; font-size: 9pt; color: #000080 }
body,textarea{ font-family: Tahoma; font-size: 9pt; color: blue}
</STYLE>
</HEAD>
<BODY bgColor=#D6D3CE leftMargin=0 marginwidth="0" scroll=no oncontextmenu="self.event.returnValue=false">
<div align="center">
<center>
<TABLE border=0 cellPadding=0 cellSpacing=0 width="600">
<TBODY>
<TR>
<TD align=left vAlign=top>
<div align="center" style="width: 598; height: 42">
<div align="center">
<font color="#0066ff">加密页面源代码脚本</font>
</div>
<p><font color="#800000">将你的页面源代码粘贴在下面的框内,要包括所有的标签例如html
, head, body等。</font></p>
</div>
<P align=center>
<P align=left><!--webbot bot="HTMLMarkup" startspan -->
<SCRIPT language=JavaScript>
var i=0;
var ie=(document.all)?1:0;
var ns=(document.layers)?1:0;

function generate() /* Generation of "Compilation" */
{
code = document.pad.text.value;
if (code)
{
document.pad.text.value='纯真过往-方宁正在加密中...请等待!';
setTimeout("compile()",1000);
}
else alert('纯真过往-方宁提醒您:还没有放入要加密的网页代码!')
}
function compile() /* The "Compilation" */
{
document.pad.text.value='';
compilation=escape(code);
document.pad.text.value="<script>\n<!--\ndocument.write(unescape(\""+compilation+"\"));\n//-->\n<\/script>";
i++;
alert("(纯真过往)已将所选内容加密成功!请点预览查看效果!");
}
function selectCode() /* Selecting "Compilation" for Copying */
{
if(document.pad.text.value.length>0)
{
document.pad.text.focus();
document.pad.text.select();
}
else alert('纯真过往-方宁提醒您:没有任何内容可以选定!')
}
function preview() /* Preview for the "Compilation" */
{
if(document.pad.text.value.length>0)
{
pr=window.open("","Preview","scrollbars=1,menubar=1,status=1,width=700,height=320,left=50,top=110");
pr.document.write(document.pad.text.value);
}
else alert('纯真过往-方宁提醒您:没有任何内容可以预览!')
}
function uncompile() /* Decompiling a "Compilation" */
{
if (document.pad.text.value.length>0)
{
source=unescape(document.pad.text.value);
document.pad.text.value=""+source+"";
}
else alert('纯真过往-方宁提醒您:请把你需要解密的代码放到此处!')
}
// -->
</SCRIPT>

<TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
<TBODY>
<TR>
<TD width="100%"><!-- Compilation Panel -->
<FORM method=post name=pad align="center"><TEXTAREA cols=58 name=text rows=11 style="BACKGROUND-COLOR: #f0f0f0;width=100%"></TEXTAREA><BR><p align="center"><INPUT name=compileIt onclick=generate() type=button value=加密>
<INPUT name=select onclick=selectCode() type=button value=选定>
<INPUT name=view onclick=preview() type=button value=预览>
<INPUT name=retur onclick=uncompile() type=button value=解密>
<INPUT name=clear type=reset value=清除>
</FORM><!-- Compilation Panel --></TD></TR></TBODY></TABLE><!--webbot bot="HTMLMarkup" endspan -->
</table>
</center>
</div>
<p align="center"><a href=" http://www.lovehy.com" target="_blank">纯真过往-方宁
http://www.czgwnn.cn</a></p>
</BODY>

④ 怎样才能看懂网页的源代码

可用HTML语言理解网页源代码。

通常用来编写网页的计算机语言有如下三种:

1、HTML语言:最常用最基本的语言,在网页中不可或缺。网页的标题、框架、背景、字体、超链接、颜色和其他元素的设置是用HTML语言完成的。Html是VB和jav的载体,网页的后缀名一般为“.HTM”或者“.HTML”。

2、VB语言,又称visual basic语言,可以进行HTML语言在网页中无法完成的计算、效果、调用各种数据乱物御库等。它属于一种相对高级的语言蚂搏,赋予网页以灵魂,丰富了网页,使用HTML和VB语言共同编写的网页的后缀名一般为“.ASP”。

3、JAVA语言,Java语言的功能与VB语言几乎相同,但它的功能更强大,其效果可能是压倒性的。现在大多数动态网页都是用HTML和Java语言编写的,后缀名一般为“.ASP”或者“.JSP”。

(4)html源码解析扩展阅读:

HTML语言编辑方式:

HTML其实是文本,它需要浏览器的解释哗岩,它的编辑器大体可以分为以下几种:

基本的文本和文档编辑软件可以使用微软自己的记事本或写字板来编写,当然,如果使用WPS,你也可以,但是,保存磁盘时,请使用,HTM或,HTML作为扩展,使浏览器能够识别和直接解释执行。

半所见即所得软件,如:fck编辑器、e-webedit和其他在线网页编辑器;特别推荐:Sublime文本代码编辑器(由Jon Skinner开发,Sublime text2收费,但可以无限期试用)。

⑤ HTML代码中<%%>、<%=%>、<%:%>各是什么意思分别用来实现什么的

<%=%>是用来绑定数据的;

<%:%>是python在.html文件中的用法;

<% %>叫做脚本片段,其中写的内容会翻译在Servlet的Service方法中,显然我们可以在Service方法中定义局部变量或者调用其他方法。

{% for img in imgs %}

{% end %}

max{x,y} 是取x,y中的最大值



正则表达式:

对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

⑥ 网页源代码的基本结构是什么

如图:

(6)html源码解析扩展阅读:

标签详解:

1.<!doctype>:是声明用哪个 HTML 版本进行编写的指令。并不是 HTML 标签。<!doctype html>:html5网页声明,表示网页采用html5。

2.<meta>:提供有关页面的元信息(针对搜索引擎和更新频度的描述和关键词等),写在<head>标签内。

a)<meta charset="UTF-8">:设置页面的编码格式UTF-8;

b)<meta name="Generator" content="EditPlus">:说明生成工具为EditPlus;

c)<meta name="Author" content="">:告诉搜索引擎站点制作的作者;

d)<meta name="Keywords" content="">:告诉搜索引擎网站的关键字;

e)<meta name="Description" content="">:告诉搜索引擎网站的内容;

热点内容
我的世界手机版暖心服务器 发布:2025-01-15 23:05:02 浏览:167
xts压缩比 发布:2025-01-15 23:02:41 浏览:422
怎么看联系人存储位置 发布:2025-01-15 22:47:14 浏览:793
旗舰560配置的是什么发动机 发布:2025-01-15 22:40:59 浏览:625
sql多表连接查询 发布:2025-01-15 22:33:12 浏览:220
android网络休眠 发布:2025-01-15 22:32:12 浏览:349
怎么不下鲁大师查看电脑配置 发布:2025-01-15 22:30:23 浏览:310
php页面乱码 发布:2025-01-15 22:28:49 浏览:846
梦幻宝贝脚本 发布:2025-01-15 22:27:36 浏览:256
安卓怎么调成2g网 发布:2025-01-15 22:21:40 浏览:285