知己知彼,百战不殆。 -------------------------《孙子兵-谋攻篇》
XML是什么?_?
- 可扩展标记语言,类似于HTML全称(Xtensible Markup Language)
- 生来便为传输数据,而不是显示数据。
- XML具有自我描述性,标签需要我们自行定义。
那什么是XPath呢?
它是一门再XML文档中查找信息的语言,用来再XML中对节点和属性进行遍历。
常用的XPath开发环境:
- 开源的Xpath表达式编辑工具:XMLQuire(XML格式文件可用)
- Chrome插件:XPath Helper
- Firefox插件: XPath Checker
接下来,操练起来,孩儿们!!!
首先安装lxml
pip install lxml
接着导入它
from lxml import etree #这样写后面会出现红色波浪线,但是可以正常使用
我们可以下main两行代码解决
import lxml.html
etree = lxml.html.etree
常用的方法
- etree.parse()
读取xml文件,结果为xml对象(object) - etree.HTML(string_html)
将字符串形式的html文件转化为xml对象 - etree.tostring(htmlelemt, encoding = "utf-8").decode("utf-8")
etree.tostring(html,encoding="utf-8", pretty_print = True).decode()
按字符串系列化HTML文档
(注意:这里的tostring的s是小写的,不要写出大写的)
选择器
表达式 | 描述 |
---|---|
nodename | 选取此节点内的所有子节点。 |
/ | 从根节点选取(选取直接子节点) |
// | 在全局搜索,不考虑位置(当用在中间位置是标识所有子孙节点) |
. | 选取当前节点 |
.. | 选取当前节点的父节点 |
@ | 选取属性(/div[@class = "container"]) |
实战——用lxml读取html文件
import lxml.html
etree = lxml.html.etree
parser = etree.HTMLParser(encoding = "utf-8")
htmlelement = etree.parse("mafengwo.html", parser = parser)
print(htmlelement)# 此时是对象类型
# 这句代码只在研究时有用,正常时没用
html_string = etree.tostring(htmlelement, encoding = "utf-8").decode("utf-8")
print(html_string)
# 读取innerText
links = htmlelement.xpath("//h3/a[@class='_j_search_link']")
for link in links:
print(link.text)
# 读取属性的值
with open("mafengwo.html", "r+") as fp:
content = fp.read()
html = etree.HTML(content)
titles = html.xpath("//div/div/span/@title")
for title in titles:
print(title)