python 数据分析之 HTML文件解析
python 数据分析之 HTML文件解析
- 一 :Html
-
- 1. Html 理解
- 2. Html 介绍
- 3. Html 构成
- 4. HTML结构 介绍
-
- 1> HTML文件结构
-
- A: 文档类型声明
- B: 根标签
- C: 头部 -head 元素
- D: title 标签
- E: meta 标签
- F: 主体-body 标签
- 2> 各部分详解
-
- A: 标题
- B: 段落
- C: 链接
- D: 图像
- E: 表格
- 3> 列表速查
-
- A: 基本文档
- B: 基本标签
- C: 文本格式化
- D: 链接
- E: 图片
- F: 样式/区块
- G: 列表
- H: 定义列表
- I: 表格
- J: 框架
- K: 实体
- M: 文本修饰
- 5> HTML语法基本规则
- 6> Htlm特点
- 二: python 对Html 文件分析
-
- 1. BeautifulSoup
- 2. BeautifulSoup应用
-
- 1> 常用参数
- 2> 遍历文档树
- 3> 文档的搜索
- 4> BeautifulSoup解析器
- 5> BeautifulSoup 高阶
-
- A: find_all 参数举例
- 三:urllib.requests
-
- 1. urllib库的作用-解析网页
- 2. urllib子模块
- 3. 使用流程
- 4. urllib.request 发送请求
-
- 1> demo
- 2> 函数
- 5. urllib.request.urlopen()
-
- 1> data
- 2> timeout
- 3> Request
-
- 1. Request 详解
- 2. 传入多个参数构建一个 Request
- 6. urllib.request高级特性
-
- 1> urllib.request.BaseHandler
- 2> Cookie设置
- 四 : python 数据分析之 xlsxwriter文件解析
一 :Html
1. Html 理解
HTML 是用来描述网页的一种语言。HTML 是一种在 Web 上使用的通用标记语言。HTML 允许你格式化文本,添加图片,创建链接、输入表单、框架和表格等等,并可将之存为文本文件,浏览器即可读取和显示。
HTML 指的是超文本标记语言: HyperText Markup Language
HTML 不是一种编程语言,而是一种标记语言
标记语言是一套标记标签 (markup tag)
HTML 使用标记标签来描述网页
HTML 文档包含了HTML 标签及文本内容
HTML文档也叫做 web 页面
2. Html 介绍
HTML:是 Hypertext Marked Language,即超文本标记语言,是一种用来制作超文本文档的简单标记语言;
HTTP超文本传输协议规定了浏览器在运行 HTML 文档时所遵循的规则和进行的操作。HTTP协议的制定使浏览器在运行超文本时有了统一的规则和标准。
HTML文件本质上是文本文件,而普通的文本文件只能显示字符。但是HTML技术则通过HTML标签把其他网页、图片、音频、视频等各种多媒体资源引入到当前网页中,让网页有了非常丰富的呈现方式,这就是超文本的含义——本身是文本,但是呈现出来的最终效果超越了文本。
3. Html 构成
html开发,本质上就是编写一个.html格式的文档,最终通过浏览器执行该文档,一个html文档中包含三部分:HTML部分、HTML部分、JS部分
| Html组成 | 含义 |
|---|---|
| HTML部分 | HTML:hyper text markup language;hyper text:超文本,是指写在html文档中,并在网络上传输的 文字、图片、视频、音频;markup language:标记语言 。所谓标记:就是指由一对尖括号扩起来,当中具有特定英文单词的标识。标记的其他叫法:标签 元素 element。 |
| CSS部分 | CSS:cascading style sheet 层叠样式表;用来对文档中的标签设置样式,从而改变超文本在浏览器上的渲染效果 |
| JS部分 | JS:javaScript;运行在浏览器端的脚本语言。平时我们看到网页,除了可以看以外,还可以处理一些用 户的交互行为,例如:鼠标的点击,键盘的控制等等。这些功能需要通过JS来完成 |
html文档中只有两种类型的标记
| html文档标记类型 | 含义 |
|---|---|
| 单标记 | 不能存放内容,多是一些功能性的标记 |
| 双标记 | 有开始有结束,主要功能是存放内容,可以是超文本, 也可以是其他标记 |
4. HTML结构 介绍
1> HTML文件结构
A: 文档类型声明
写在html文档的第一行是文档中唯一个非标签字符,起文档说明作用,用来告知浏览器,当前文档是一 个支持html5标准的文档,不可省略,其中最重要的就是当前HTML文档遵循的语法标准。
HTML4版本的文档类型声明是:
HTML5版本的文档类型声明是:
B: 根标签
html标签是整个文档的根标签,所有其他标签都必须放在html标签里面。上面的文档类型不能当做普通标签看待。该标签包含两个子标签:head 和 body
C: 头部 -head 元素
head标签用于定义文档的头部,其他头部元素都放在head标签里。头部元素包括title标签、script标签、style标签、link标签、meta标签等等。
D: title 标签
作用:设置文档的标题或者名称。浏览器通常将该标签的内容显示在窗口顶部或者标签页上。每个 HTML 文档只能有一个,必须有一个 title 标签。
E: meta 标签
声明字符的编码格式为 utf-8
F: 主体-body 标签
body标签定义网页的主体内容,在浏览器窗口内显示的内容都定义到body标签内;也就是我们的主要内容(比如文本、超链接、图像、表格和列表等)
E: 注释
描述当前代码功能,代码信息 、编写日期、作者 、维护日期、维护者
HTML注释的写法是:
F: demo
Html test 我的第一个标题
我的第一个段落。
=================================== 声明为 HTML5 文档 元素是 HTML 页面的根元素 元素包含了文档的元(meta)数据,如 定义网页编码格式为 utf-8(由于在大部分浏览器中直接输出中文会出现乱码,所以要在头部将字符声明为UTF-8)元素描述了文档的标题 元素包含了可见的页面内容 元素定义一个大标题
元素定义一个段落
2> 各部分详解
A: 标题
HTML 标题(Heading)是通过
–
标签来定义的
Html test
我的第一个标题
我的第二个标题
我的第三个标题
B: 段落
Html test 我的第一个标题
我的第二个标题
我的第三个标题
B: 段落
HTML 段落是通过标签
来定义的
Html test 这是一个段落。
这是一个段落。
这是一个段落。
C: 链接
HTML 链接是通过标签 来定义的
这是一个链接使用了 href 属性
D: 图像
HTML 图像是通过标签 来定义的。注意: 图像的名称和尺寸是以属性的形式提供的。
E: 表格
表格由
| 标签定义)。字母 td 指表格数据(table data),即数据单元格的内容。数据单元格可以包含文本、图片、列表、段落、表单、水平线、表格等等。表格的表头使用 | 标签进行定义。如果不定义边框属性,表格将不显示边框。有时这很有用,但是大多数时候,我们希望显示边框。使用边框属性来显示一个带有边框的表格:
3> 列表速查A: 基本文档
B: 基本标签h1-h6 块元素 独立成行 行间距 属性: align 对齐方式 left center right color 不存在 如果需要设置样式 要嵌套font标签
C: 文本格式化粗体文本 计算机代码 强调文本 斜体文本 键盘输入预格式化文本 有序列表
H: 定义列表
I: 表格
J: 框架K: 实体< 等同于 © 等同于 © M: 文本修饰font 行内标签 属性: size 字体大小 最大值是7 color 颜色值 颜色单词 red green blue 颜色的RGB rgb(0,0,255) 十六进制表示 #0000ff face 字体族 黑体 楷体 宋体 华文彩云 必须浏览器支持
5> HTML语法基本规则
6> Htlm特点
二: python 对Html 文件分析1. BeautifulSoup在使用BeautiSoup对其进行解析,解析的时候要使用相应类型的解析器html.parser from bs4 import BeautifulSoup file = open(r'C:/Users/CHH_PC/Desktop/test.html','rb') html = file.read() bs = BeautifulSoup(html,'html.parser') BeautifulSoup 将复杂的HTML文档转换成一个复杂的树形结构,每个结点都是一个Python对象,所有对象可以分为四种:
2. BeautifulSoup应用1> 常用参数
2> 遍历文档树
3> 文档的搜索
4> BeautifulSoup解析器
例如: soup = BeautifulSoup(html, ‘lxml’)创建对象 soup = BeautifulSoup(open(‘test.html’),‘lxml’)读取HTML文件 5> BeautifulSoup 高阶A: find_all 参数举例
三:urllib.requests1. urllib库的作用-解析网页作用:urllib 模块是一个高级的 web 交流库,其核心功能就是模仿web浏览器等客户端,去请求相应的资源,并返回一个类文件对象。可以使用代码模拟浏览器发起请求 urllib 是python3 的内置库,urllib库最大的作用就是可以去设定相关的头部信息然后和网站建立请求连接,请求连接建立完成后就能够去获取到网页的整体数据,这也是python爬虫脚本实现的核心 2. urllib子模块urllib模块包括:urllib.request, urllib.error, urllib.parse,urllib.robotparser
模拟请求使用的最主要的库便是urllib.request,异常处理用urllib.error库 3. 使用流程
4. urllib.request 发送请求urllib.request 模块提供了最基本的构造 HTTP 请求的方法,利用它可以模拟浏览器的一个请求发起过程,同时它还带有处理 authenticaton (授权验证), redirections (重定向), cookies (浏览器Cookies)以及其它内容 demo 1> demoimport urllib.request
response = urllib.request.urlopen("https://www.baidu.com")
print(response)
====================
返回一个一个 HTTPResposne 类型的对象,它包含方法有 read() 、 readinto() 、getheader(name) 、 getheaders() 、 fileno() 等函数和 msg 、 version 、 status 、 reason 、 debuglevel 、 closed 等属性,所以可以通过response 调用这些方法和属性
2> 函数
5. urllib.request.urlopen()def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
*, cafile=None, capath=None, cadefault=False, context=None)
1> dataimport urllib.parse
import urllib.request
data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding=
'utf8')
response = urllib.request.urlopen('http://httpbin.org/post', data=data)
print(response.read().decode()) # 把bety转换为字典形式数据
========================
{
"args": {},
"data": "",
"files": {},
"form": {
"word": "hello"
},
"headers": {
"Accept-Encoding": "identity",
"Content-Length": "10",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "Python-urllib/3.7",
"X-Amzn-Trace-Id": "Root=1-63f61236-4616d33d219931e3332ba8b5"
},
"json": null,
"origin": "117.143.152.208",
"url": "http://httpbin.org/post"
}
POST 请求: 这里我们传递了一个参数 word ,值是 hello 。它需要被转码成 bytes (字节流)类型。其中转字节流采用了 bytes() 方法; 第一个参数需要是 str (字符串)类型,需要用 urllib.parse.urlencode() 方法来将参数字典转化为字符串。 第二个参数指定编码格式,在这里指定为 utf8 2> timeoutimport urllib.request
response = urllib.request.urlopen("https://www.baidu.com/?tn=65081411_1_oem_dg",timeout=1)
print(response.read().decode())
设置了超时时间是1秒,程序1秒过后服务器依然没有响应,于是抛出了 urllib.error./img/16/URLError: 异常,错误原因是 timed out;因此我们可以通过设置这个超时时间来控制一个网页如果长时间未响应就跳过它的抓取,利用 try,except 语句就可以实现这样的操作 import urllib.request
import socket
import urllib.error
try:
response = urllib.request.urlopen('http://httpbin.org/get',timeout=0.1)
except urllib.error./img/16/URLError as e:
if isinstance(e.reason, socket.timeout):
print("Time out!")
3> Request1. Request 详解import urllib.request
request = urllib.request.Request("https://www.baidu.com")
response = urllib.request.urlopen(request)
print(response.read().decode("utf-8"))
依然是用 urlopen() 方法来发送这个请求,只不过这次 urlopen() 方法的参数不再是一个/img/16/URL,而是一个 Request ,通过构造这个这个数据结构,一方面我们可以将请求独立成一个对象,另一方面可配置参数更加 丰富和灵活 def __init__(self, url, data=None, headers={},
origin_req_host=None, unverifiable=False,
method=None):
2. 传入多个参数构建一个 Request通过四个参数构造了一个 Request , url 即请求链接,在 headers 中指定了 User-Agent 和 Host ,传递的参数 data 用了 urlencode() 和 bytes() 方法来转成字节流,另外指定了请求方式为 POST from urllib import request,parse
url = "http://httpbin.org/post"
headers = {
#伪装一个火狐浏览器
"User-Agent":'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
"host":'httpbin.org'
}
dict = {
"name":"Germey"
}
data = bytes(parse.urlencode(dict),encoding="utf8")
req = request.Request(url=url,data=data,headers=headers,method="POST")
response = request.urlopen(req)
print(response.read().decode("utf-8"))
==========================
{
"args": {},
"data": "",
"files": {},
"form": {
"name": "Germey"
},
"headers": {
"Accept-Encoding": "identity",
"Content-Length": "11",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)",
"X-Amzn-Trace-Id": "Root=1-63f61795-1ff741e6101a79d9442e056c"
},
"json": null,
"origin": "117.143.152.208",
"url": "http://httpbin.org/post"
}
Process finished with exit code 0
headers 也可以用 add_header() 方法来添加。 req = request.Request(url=url, data=data, method=‘POST’) req.add_header(‘User-Agent’, ‘Mozilla/4.0 (compatible; MSIE 5.5;Windows NT)’) 如此一来,我们就可以更加方便地构造一个 Request ,实现请求的发送 6. urllib.request高级特性虽然可以构造 Request ,但是一些更高级的操作,比如 Cookies 处理,代理该怎样来设置?需要更强大的工具 Handler ; 简而言之你可以把它理解为各种处理器,有专门处理登录验证的,有处理 Cookies 的,有处理代理设置的,利用它们我们几乎可以做到任何 HTTP 请求中所有的事情 1> urllib.request.BaseHandler它是所有其他 Handler 的父类,它提供了最基本的 Handler 的方法,例 如 default_open() 、 protocol_request() 等
实例代码1 import urllib.request
auth_handler = urllib.request.HTTPBasicAuthHandler()
auth_handler.add_password(realm='PDQ Application',
uri='https://mahler:8092/site-updates.py',
user='klem',
passwd='kadidd!ehopper')
opener = urllib.request.build_opener(auth_handler)
urllib.request.install_opener(opener)
urllib.request.urlopen('http://www.example.com/login.html'
=============================
说明 Handler 和 Opener 的使用方法。在这里,首先实例化了一个 HTTPBasicAuthHandler 对象,利用 add_password() 添加进去用户名和密码,相当于建立了一个处理认证的处理器;接下来利用 urllib.request.build_opener() 方法来利用这个处理器构建一个 Opener ,那么这个 Opener 在发送请求的时候就具备了认证功能了。接下来利用 Opener 的 open() 方法打开链接,就可以完成认证了
实例代码2 代理 import urllib.request
proxy_handler = urllib.request.ProxyHandler({
'http': 'http://218.202.111.10:80',
'https': 'https://180.250.163.34:8888'
})
opener = urllib.request.build_opener(proxy_handler)
response = opener.open('https://www.baidu.com')
print(response.read())
=============================
用于说明代理的设置方法,代理可能已经失效。
在这里使用了 ProxyHandler , ProxyHandler 的参数是一个字典,key是协议类型,比如 http 还是 https 等,value是代理链接,可以添加多个代理。
然后利用 build_opener() 方法利用这个 Handler 构造一个 Opener ,然后发送请求即可
2> Cookie设置获取网站的 Cookie import http.cookiejar, urllib.request
cookie = http.cookiejar.CookieJar() 或则cookie = http.cookiejar.LWPCookieJar(filename)# LWPCookieJar ,同样可以读取和保存 Cookie ,但是保存的格式和 MozillaCookieJar 的不一样,它会保存成与libwww-perl的Set-Cookie3文件格式的 Cookie
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
for item in cookie:
print(item.name+"="+item.value)
========================
打印
BAIDUID=8D12919D30F39DFDD8FC36AC5F965BD4:FG=1
BIDUPSID=8D12919D30F39DFDD1ED7D576F0628B2
H_PS_PSSID=36561_38129_37906_37861_38264_38173_38289_38243_38034_38263_37928_38285_26350_22157_37881
PSTM=1678009542
BDSVRTM=0
BD_HOME=1
===============================================
首先必须声明一个 CookieJar 对象,接下来我们就需要利用 HTTPCookieProcessor 来构建一个 handler ,最后利用 build_opener 方法构建出 opener ,执行 open() 即可
Cookie 实际也是以文本形式保存 filename = 'cookie.txt'
cookie = http.cookiejar.MozillaCookieJar(filename)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
cookie.save(ignore_discard=True, ignore_expires=True)
===================
这时的 CookieJar 就需要换成 MozillaCookieJar ,生成文件时需要用到它,它是 CookieJar 的子类,可以用来处理 Cookie 和文件相关的事件,读取和保存 Cookie ,它可以将 Cookie 保存成 Mozilla 型的格式;运行之后可以发现生成了一个 cookie.txt 文件
从文件读取并利用Cookie 信息 cookie = http.cookiejar.LWPCookieJar()
cookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
print(response.read().decode('utf-8'))
===========================
利用上面的方式生成了 LWPCookieJar 格式的 Cookie ,然后利用 load() 方法,传入文件名称,后面同样的方法构建 handler 和 opener 即可
四 : python 数据分析之 xlsxwriter文件解析python 数据分析之 xlsxwriter文件解析 https://blog.csdn.net/weixin_42914706/article/details/129116587 本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/9267ab5881.html |
|---|
