zoukankan      html  css  js  c++  java
  • 解析对象和解析方式

    # 1. ===================使用etree================
    
    # 下载:pip3 install lxml
    # 导包:from lxml import etree
    
    # 将html文档或者xml文档转换成一个etree对象,然后调用对象中的方法查找指定的节点
        # 2.1 本地文件:tree = etree.parse(文件名)
    tree.xpath("xpath表达式")
        # 2.2 网络数据:tree = etree.HTML(网页内容字符串)
    tree.xpath("xpath表达式")
    
    # 2. ===================使用Selector=============
    
    from scrapy import Selector
    html_selector = Selector(text=response)
    str = html_selector.xpath("/html/body/div[2]/div[1]/div[2]/div[1]/p[1]/a/b/text()").extract_first()
    print(str)  # 落梅风·斜阳外
    
    # 3. =================xpath语法=================
    
    1. 属性定位:
    # 找到class属性值为song的div标签
    // div[@class="song"]
    
    2. 层级 & 索引定位:
    # 找到class属性值为tang的div的直系子标签ul下的第二个子标签li下的# 3. 直系子标签a
    // div[@class ="tang"]/ul/li[2]/a
    
    4. 逻辑运算:
    # 找到href属性值为空且class属性值为du的a标签
    // a[@href="" and @class="du"]
    
    5. 模糊匹配:
    # class中包含ng的 class="xxx" 是这个class类
    // div[contains(@class, "ng")]  # contains 包含
    // div[starts-with(@class, "ta")]  # starts 以什么什么开头
    
    6. 取文本:
    # /表示获取某个标签下的文本内容
    # //表示获取某个标签下的文本内容和所有子标签下的文本内容
    // div[@class="song"]/p[1]/text()  # 取直系文本
    // div[@class="tang"]//text()  # 取所有文本
      # /text 返回列表 一个列表
        # //text() 返回多个列表
    
    7. 取属性:
    // div[@class="tang"]//li[2]/a/@href
    // a[text()='下一页']/@href
    
    #4. =================xpath函数======================
    
    1. starts-with函数
    获取以xxx开头的元素
    
    例子:xpath(‘//div[stars-with(@class, ”test”)]’)
    
    2 contains函数
    
    获取包含xxx的元素
    
    例子:xpath(‘//div[contains(@id, ”test”)]’)
    
    3 and
    与的关系
    
    例子:xpath(‘ // div[contains(@id, ”test”) and contains(@id, ”title”)]’)
    
    4 text()函数
    # /表示获取某个标签下的文本内容
    
    # //表示获取某个标签下的文本内容和所有子标签下的文本内容
    
    // div[@class="song"]/p[1]/text()  # 取直系文本
    
    // div[@class="tang"]//text()  # 取所有文本
    
    # /text 返回一个列表
    
    # //text() 返回多个列表
    
    # 4. ==================BeautifulSoup==================
    
    # 使用流程:
    - 导包:from bs4 import BeautifulSoup
    - 使用方式:可以将一个html文档,转化为BeautifulSoup对象,然后通过对象的方法或者属性去查找指定的节点内容
    (1)转化本地文件:
    - soup = BeautifulSoup(open('本地文件'), 'lxml')
    (2)转化网络文件:
    - soup = BeautifulSoup('字符串类型或者字节类型', 'lxml')
    (3)打印soup对象显示内容为html文件中的内容
    
    # 基础巩固:
    (1)根据标签名查找
    - soup.a  # 只能找到第一个符合要求的标签
    (2)获取属性
    - soup.a.attrs  # 获取a所有的属性和属性值,返回一个字典
    - soup.a.attrs['href']  # 获取href属性
    - soup.a['href']  # 也可简写为这种形式
    (3)获取内容
    - soup.a.string  # 返回字符串 直系文本数据 直系就是没有跨级 比如ul下的li
    # li里面的a标签就不是直系了
    - soup.a.text  # 很可能返回列表 非直系的文本数据
    - soup.a.get_text()  # 很可能返回列表 非直系的文本数据
    【注意】如果标签还有标签,那么string获取到的结果为None,而其它两个,可以获取文本内容
    (4)find:找到第一个符合要求的标签
    - soup.find('a')  # 找到第一个符合要求的和soup.a 效果一样 返回的是单数
    - soup.find('a', title="xxx")  # 获得属性值为title="xxx"的标签
    - soup.find('a', alt="xxx")
    - soup.find('a', class_="xxx")  # 注意下划线
    - soup.find('a', id="xxx")
    (5)find_all:  # 找到所有符合要求的标签 返回的是复数
    - soup.find_all('a')
    - soup.find_all(['a', 'b'])  # 找到所有的a和b标签
    - soup.find_all('a', limit=2)  # 限制前两个
    (6)根据选择器选择指定的内容
    select:soup.select('#feng')
           - 常见的选择器
    
    :标签选择器(a)、类选择器(.)、id选择器(  # )、层级选择器
    - 层级选择器:
    div.dudu  # lala .meme .xixi  # 下面好多级 div空格.dudu
    div > p > a >.lala  # 只能是下面一级
    【注意】select选择器返回永远是列表,需要通过下标提取指定的对象
    

      

  • 相关阅读:
    Devexpress之LayoutControl的使用及其控件布局设计
    C#入门笔记3 表达式及运算符2
    C#入门笔记3 表达式及运算符
    C#入门笔记2 变量
    C#入门笔记1
    Devexpress之GridControl显示序列号
    C++学习之重载运算符1
    解决"找不到该项目”无法删除该文件
    删除鼠标右键时“保存至360云盘”
    CSS基础知识——选择器
  • 原文地址:https://www.cnblogs.com/yzg-14/p/12122279.html
Copyright © 2011-2022 走看看