一、XML数据提取
(1)定义:XML指可扩展标记语言、标记语言,标签需要我们自行定义
(2)设计宗旨:是传输数据,而非显示数据,具有自我描述性
(3)节点关系: 父:每个元素及属性都有一个父、
子:每个元素可能有0个或者多个子
同胞:拥有相同的父的节点
先辈:父的父
后代:子的子
(4)XPath:是在XML中查找信息的语言,可以对XML文档元素和属性进行遍历
(5)XMLQuire是开源的XPath表达式编辑工具,Chrome插件是XPath Helper,Firefox插件Xpath Checker
(6)lxml的主要功能是如何解析和提取HTML/XMl数据,安装:pip install lxml,官方文档:lxml.de/index.html,lxm可以自动修正html代码
(7)文件读取
from lxml importetree#读取外部文件
html = etree.parse('/hello.html')
result= etree.tostring(html,pretty_print=True)
(8)获取相应的标签
from lxml importetree#读取外部文件
html = etree.parse('/hello.html')
result= etree.tostring(html,pretty_print=True)#获取
标签result = html.xpath('//li')#获取
标签的所有class属性result = html.xpath('//li/@class')#获取li标签下hre为link1.html的a标签
result = html.xpath('//li/a[@href="link1.html"]')#获取li标签下的span标签
result = html.xpath('//li/span')#获取最后一个li的a的href
result = html.xpath('//li[last()]/a/@href')#获取倒数第二个元素内容
result = html.xpath('//li[last()-1]/a')#获取class值为bold的标签名
result = html.xpath('//*[class="blod"]')
二、CSS选择器(BeautifulSoup)
(1)BeautifulSoup用来解析HTML比较签单,目前使用的BeautifulSoup4,安装为:pip install BeautifulSoup4
(2)引用
from bs4 import BeautifulSoup
(3)四大对象种类
1.Tag:HTMl中的一个个标签
from bs4 importBeautifulSoup
soup=BeautifulSoup(html)
result=soup.title
result=soup.head
result=soup.a
result=soup.p#它的两个重要属性 name he attrs
soup.name#[document]
soup.head.name#对于其他内部标签,输出的值便为标签本身的名称
soup.p.attrs#把p标签的所有属性打印出来,得到一个字典
soup.p['class']#传入属性的名称,等同于 soup.p.get('class')
soup.p['class'] = "newclass"
#修改值
del soup.p['class']#删除值
2.NavigableString,获取标签的内容
soup.p.string
3.BeautifulSoup:特殊的Tag对象
4.Comment:特殊的NavigableString对象
#将tag的子节点以列表的方式输出
soup.head.contents#输出的方式为列表,可以用列表的索引获取他的某一个元素
soup.head.contents[0]#.children,返回的不是list,可以用遍历获取所有的子节点
soup.head.childrenfor child insoup.body.children:print(child)#.descendants对所有子孙节点进行递归循环
for child insoup.body.descendants:print(child)
(5)搜索文档树
1.find_all*(name,attrs,recursive,text,**kwargs)
(6)CSS选择器 soup.select()
#通过标签查找
soup.select('tilte’)
#通过类名查找
soup.select('.sister')#通过ID名查找
soup.select('#link1')#组合查找
soup.select('p #link1')#直接子标签查找
soup.select("head > title")#属性查找
soup.select('a[class="sister"]')#获取内容
for title in soup.select('title')print(title.get_text())
三、JSON数据提取