Python_lxml解析HTML 1.Python解析XML的常⽤⽅法有以下⼏种:
1、DOM解析, xml.dom.*模块。
2、SAX解析, xml.sax.*模块。
3、ET解析,  ElementTree模块。
4、lxml解析,并结合XPath提取元素。
01.说明:
lxml有两⼤部分,分别⽀持XML和HTML的解析:
< 解析 XML
lxml.html  解析 html
from lxml import etree, html
02.lxml解析
#01.导⼊相关标准库
from lxml import etree
#02.定义解析器
parser = etree.XMLParser(encoding = "utf-8")
#03.使⽤解析器parser解析XML⽂件
tree = etree.parse(l",parser = parser)
#04.结合xpath提取XML⽂件中的信息-即使⽤ xpath 语法提取⽹页元素
mytext = tree.xpath('//loc/text()')
2.Python解析HTML
lxml
⾃2.0版本起有了专门⽤于处理html的模块 lxml.html,
模块中包含⼏种解析html的⽅式, :
from lxml.html import fromstring, soupparser, html5lib
fromstring  Parse the html, returning a single element/document.:解析字符串
soupparser  """External interface to the BeautifulSoup HTML parser.
lxml can make use of BeautifulSoup as a parser backend,
just like BeautifulSoup can employ lxml as a parser.
#解析器
lxml.html    中的解析器
BeautifulSoup4中的解析器
#提取⼯具
可以使⽤ find 、findall 或者 XPath 来搜索Element包含的标签对象
XPath,全称XML Path Language,即XML路径语⾔
标签定位从根节点选取任意位置的某个节点选取属性
使⽤@符号即可获取节点的属性某个属性的值有多个时,我们可以使⽤contains()函数来获取
text()⽅法获取节点中的⽂本
序列定位利⽤中括号引⼊索引的⽅法获取特定次序的节点第⼀个元素所有lang='en'的元素
轴定位    XPath提供了很多节点选择⽅法,包括获取⼦元素、兄弟元素、⽗元素、祖先元素等
XPath中的运算符
Bs4:from bs4 import BeautifulSoup
BeautifulSoup(markup, "html.parser")
BeautifulSoup(markup, "lxml") BeautifulSoup(markup, ["lxml-xml"])  BeautifulSoup(markup, "xml")
BeautifulSoup(markup, "html5lib")
Tag,它有两个重要的属性,是 name 和 attrs
3.HTML
<!DOCTYPE html> 声明为 HTML5 ⽂档
<html>  元素是 HTML 页⾯的根元素
<head>  元素包含了⽂档的元(meta)数据,如 <meta charset="utf-8"> 定义⽹页编码格式为 utf-8。
<title>  元素描述了⽂档的标题
<body>  元素包含了可见的页⾯内容
<h1>  元素定义⼀个⼤标题  HTML 标题(Heading)是通过<h1> - <h6> 标签来定义的。
<p>  元素定义⼀个段落    HTML 段落是通过标签 <p> 来定义的
<a>    HTML 链接是通过标签 <a> 来定义的 ref 属性中指定链接的地址。
<br> 换⾏
HTML 分组标签
<div> 定义了⽂档的区域,块级 (block-level)  div 元素来创建多列布局
<span>⽤来组合⽂档中的⾏内元素,内联元素(inline)
表格:表格由 <table> 标签来定义。
<tbody> 定义表格的主体
每个表格均有若⼲⾏(由 <tr> 标签定义),
每⾏被分割为若⼲单元格(由 <td> 标签定义)。字母 td 指表格数据(table data),即数据单元格的内容
HTML 标签 (HTML tag) 开始标签与结束标签
属性:总是以名称/值对的形式出现,⽐如:name="value"
class  id  style  title
style 规定元素的⾏内样式(inline style)
<style type="text/css">
4.代码⽰例
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import requests
from lxml import etree
if __name__ == "__main__":
pass
url = r"www.9145"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "                            "Chrome/51.0.2704.103 Safari/537.36"}
# 下载数据
response = (url_01, headers=headers)
#HTML parse 解析器
html = etree.t.decode('utf-8'))
# 解析HTML,筛选数据
# XPath使⽤路径表达式来选取XML⽂档中的节点或者节点集
df = html.xpath('//table[contains(@class, "")]/tbody/tr//td//text()')
mid_deal_ls = []
for data in df:
field_string = "".join(data.strip().split())
if field_string != '':
mid_deal_ls.append(field_string)
info = ["项⽬", "⽤途"]
for want_dat in info:
for own_data in mid_deal_ls:
if own_data == want_dat:
print(want_dat, mid_deal_ls[mid_deal_ls.index(want_dat)+1])
# get name and location
house_info_df = html.xpath('//div[contains(@class, "spf_del_title clearfix")]//h2//text()')
name_location = []
for location_data in house_info_df:
field_string = "".join(location_data.strip().split())
if field_string not in ('', "[", "]"):
name_location.append(field_string)
print("name", name_location[0])
print("location", name_location[1])
xpath语法 python5.参考
adthedocs.io/zh_CN

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。