HTML网页结构分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTML网页结构分析相关的知识,希望对你有一定的参考价值。

老师说什么一个域名就对应服务器上的一个文件夹,然后网页上的按钮又对应其他文件夹,谁能找个简单的网页分析下它的服务器上有多少个文件夹,分别如何包含的

http://zhidao.baidu.com/question/454801449941981325.html
比如说这个链接,前面的http://zhidao.baidu.com/就是这个网站的根目录,对应的一个文件夹
后面的question就是另一个文件夹被根目录包含着然后下面的454801449941981325.html就是question这个文件夹下的一个html文件他们的结构就是
网站根目录

question
454801449941981325.html
一层包含一层
参考技术A 每个网站都有一个跟目录,域名只要根目录绑定了,域名解析后打开就目录里的文件会被读取到的,根目录里的文件结构这个完全是根据个人的代码习惯 参考技术B 一个域名对应一个文件夹的意思是:这个域名对应的文件夹是网站的根目录。
网页上的每个文件都在各自的文件夹里面。关于具体的你可以分析一下: DedeCMS 或Discuz 等开源的网站源码。下载到本地,看一下,就知道了追问

就要交这个文件夹目录,写出文件夹里还包含了那些文件夹,找不到很简单的网页了,能帮忙示范下吗?

参考技术C 自己示范下比什么都好。加油。

[技术博客] BeautifulSoup4分析网页

[技术博客] BeautifulSoup4分析网页

使用BeautifulSoup4进行网页文本分析

前言

进行网络爬虫时我们需要从网页源代码中提取自己所需要的信息,分析整理后存入数据库中。

在python中,我们向网页发出请求后可以获得字符串形式的源代码,然而众所周知,HTML代码结构相当混乱,想要通过字符串本身的查找方法获取信息基本上不可能。不过好消息是python也为我们提供了正则表达式这一字符串分析利器,通过恰当的编写正则表达式就可以高效准确地分析网页。然而对于一份长长的HTML源代码,从中分析规律、编写正则表达式、验证准确性,这一轮下来需要花费大量的时间。再加上网页的跳转,多个网页的分析,在没有爬取效率的要求下使用正则表达式几乎就是一个煎熬。因此一个成熟的网页爬虫利器BeautifulSoup就此诞生,它是一个可以从HTML或XML文件中提取数据的Python库,能够方便的提取自己所需要的信息。

安装

BeautifulSoup4的安装相当简单,只需在命令行中使用pip安装即可

pip install beautifulsoup4  

导入

同样简单易懂

from bs4 import BeautifulSoup

网页解析库

BeautifulSoup4默认支持Python的标准HTML解析库,可以不进行解析库的配置,但是依然建议安装lxml HTML解析库,它比Python的标准HTML解析库更加强大,速度快,容错能力强

使用方法

简易操作

以下面的HTML代码举例

html_doc = """
<html><head><title>The Dormouse‘s story</title></head>
<body>
<p class="title"><b>The Dormouse‘s story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""

创建BeautifulSoup对象以及简易信息获取

from bs4 import BeautifulSoup

# 使用lxml作为解析库
soup = BeautifulSoup(html_doc,’lxml’)		

# 获取title标签的所有内容
print(soup.title) 

# 获取title标签的名称
print(soup.title.name) 

# 获取title标签的文本内容
print(soup.title.string) 

# 获取head标签的所有内容
print(soup.head) 

# 获取第一个a标签中的所有内容
print(soup.a) 

# 获取所有的a标签中的所有内容
print(soup.find_all("a"))

# 获取id="link3"
print(soup.find(id="link3")) 

# 获取所有的a标签,并遍历打印a标签中的href的值
for item in soup.find_all("a"): 
	print(item.get("href")) 
	
# 获取所有的a标签,并遍历打印a标签的文本值
for item in soup.find_all("a"): 
	print(item.get_text())

通过这些操作就可以进行简易的指定标签内数据的获取

但是还是存在一些更加困难的场景

CSS选择器

BeautifulSoup整合了lxml的CSS选择器功能,使得API更易用。

通过CSS选择器可以更加精确地获取所需内容

我们可以像之前一样查找标签

print(soup.select(‘a‘))

也可以像之前一样查找id

print(soup.select(‘#link3‘))

我们还可以按照层级查找

print(soup.select(‘table > tr > td‘))

我们还可以根据标签内部的属性查找

print(soup.select(‘a[href="http://example.com/elsie"]‘))

我们甚至可以组合上面的方式查找

print(soup.select(‘div > a[href=‘http://tieba.baidu.com‘] > table #list > tr > td‘))

获取选项后我们可以查找其中的子项,输出它的各个属性,也可以直接输出其中包含的文本等

print(soup.select(‘title‘)[0].get_text())		# 直接输出文本
print(soup.select(‘title‘)[0].attrs[‘value‘])	        # 输出它的value属性
print(soup.select(‘title‘)[0].content)			# 输出它的子项

除了这些功能以外BeautifulSoup4还有其他的许多优秀功能等待大家的挖掘,比如.children迭代器、.prettify()格式化输出等。

希望大家能通过BeautifulSoup4的使用大大降低肝度。

以上是关于HTML网页结构分析的主要内容,如果未能解决你的问题,请参考以下文章

Spark SQL:结构化数据文件处理03

[技术博客] BeautifulSoup4分析网页

[技术博客] BeautifulSoup4分析网页

网页HTML的基本结构是啥?

从网页中通过正则表达式获取标题等信息实现过程分析

网页搜集系统