Python——爬虫——数据提取

一、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 import etree
#读取外部文件
html = etree.parse('/hello.html')
result = etree.tostring(html,pretty_print=True)

  (8)获取相应的标签 

from lxml import etree
#读取外部文件
html = etree.parse('/hello.html')
result = etree.tostring(html,pretty_print=True)
#获取<li>标签
result = html.xpath('//li')
#获取<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 import BeautifulSoup
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.children
for child in soup.body.children:
    print(child)

#.descendants对所有子孙节点进行递归循环
for child in soup.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数据提取

posted @ 2019-03-08 13:35  澄心元素  阅读(651)  评论(0编辑  收藏  举报