day05-爬虫5


    https://beautifulsoup.readthedocs.io/zh_CN/latest/
    修改配置文件,bind 127.0.0.1 将这一行注释掉即可
    1、xpath学习
    什么是xml?xml是一种字符串格式,作用和json一样,都用在存储和传输数据中,现在由于json的优势,现在一般用的都是json
    xml和html的不同
    (1)xml用来存储和传输数据,html用来显示数据
    (2)xml标签需要自己定义,html标签,是固定的
    (3)xml是纯文本信息,html是超文本信息
    (4)xml的标签必须有关闭标签,html有单边标签
    xpath是什么?是用来解析xml数据的
    常见的路径表达式:
    / 根节点 层级分隔符
    // 从任意位置开始查找
    . 从当前节点开始查找
    .. 从上一级节点开始查找

    bookstore/book 查找bookstore下面book节点,直接子节点
    bookstore//book 查找bookstore下面的所有book节点
    //book 查找整个文档中所有的book节点
    //@lang 查找所有属性名为lang的节点
    bookstore/book[1] 第一个book,直接子节点的第一个book,下标从1开始
    bookstore/book[last()] 直接子节点的最后一个book
    bookstore/book[last()-1] 直接子节点的倒数第二个book
    bookstore/book[position()<3] 直接子节点的前两个book
    bookstore//book[1] bookstore下面的所有book的第一个book
    //title[@lang] 整个文档中所有拥有lang属性的title节点
    //title[@lang=’eng’] 整个文档中所有lang属性为eng的title节点
    bookstore/ bookstore下面所有的直接子节点
    bookstore//
    bookstore下面所有的节点
    //title[@*] 所有有属性的title节点

    starts-with 判断以某某开头
    contains 判断包含某某

    在爬虫中,我们得到是html数据,xpath可以解析xml数据,而且效率很高。xpath可否解析html数据,能,安装一个库即可
    pip install lxml
    div/a
    div//a
    //div[@class=’goudan’]
    xpath在html中的应用,给谷歌浏览器安装一个xpath插件
    三个点==更多工具==扩展程序==插件拖进来即可
    启动和关闭
    ctrl + shift + x
    常用的xpath方式
    (1)根据属性查找
    //input[@id=”kw”]
    //span[@class=”bg s_ipt_wr quickdelete-wrap”]
    需要注意的是,如果class有多个,那么所有的class都需要写上才可以
    (2)根据索引和层级查找
    //div[@id=”head”]/div/div[3]/a[2] 第二个
    //div[@id=”head”]/div/div[3]/a[last()] 最后一个
    //div[@id=”head”]/div/div[3]/a[last()-1] 倒数第二个
    //div[@id=”head”]/div/div[3]/a[position()<3]

    //div[@id=”head”]/div/div/a

    //div[@id=”head”]/div/div//a
    //div[@id=”head”]/div/div[3]//a[2]
    //div[@id=”head”]//a
    (3)获取属性和内容
    //div[@id=”head”]/div/div[3]/a[2]/@href
    //div[@id=”head”]/div/div[3]/img/@src
    //div[@id=”head”]/div/div[3]/a[2]/text()
    (4)两个函数
    starts-with
    //div[@id=”head”]/div/div[3]/a[starts-with(@href,”https”)]
    //div[@id=”head”]/div/div[3]/a[starts-with(text(),”地”)]
    contains
    //div[@id=”head”]/div/div[3]/a[contains(@href,”hao”)]
    //div[@id=”head”]/div/div[3]/a[contains(text(),”多产”)]
    xpath在代码中的应用
    from lxml import etree
    本地:tree = etree.parse(本地文件名)
    网络:tree = etree.HTML(网页字符串内容)
    tree.xpath(‘xxx’)
    返回的是一个列表,列表里面是符合要求的对象
    2、xpath实例
    懒加载
    图片网页,40个图片,这个网页要想出现在你面前,需要多少个请求。 15-30 55-70
    为了提高用户体验,前端实现的是懒加载。有的加载了,有的没有加载,可视区内的图片先加载,没有出现在可视区内的,可以先不加载。
    实现原理
    xpath - 图1
    xpath - 图2 js判断,如果这个图片出现在可视区,通过js将src2修改为src
    src2 data-src data-original class=’lazy’
    3、json数据解析
    json数据,是什么?一个字符串,json格式的字符串
    用在哪呢?前端-后端,python,请求其它的接口,python用到json格式,如果你作为后端,你需要生成json格式的数据,然后发送给前端。如果你做为前端,就是你要请求其它的接口,你这个python端,你要会解析json格式的数据。
    爬虫中。python去请求接口,返回给你的是json格式数据。如何解析它?
    (1)使用python自带的json模块解析
    import json
    json.dumps() 将字典或者列表转化为json格式的字符串
    json.loads() 将json格式的字符串转化为字典或者列表
    了解
    json.dump() 将字典或者列表转化为json格式字符串并且写入到文件中
    json.load() 从文件中读取json格式字符串,转化为字典或者列表
    (2)使用jsonpath解析
    obj[‘haha’][0][‘xixi’][‘meme’][1]
    安装 pip install jsonpath
    / $ 根元素
    / . 层级分隔符
    // .. 从任意位置开始查找
    xpath索引从1开始,jsonpath索引从0开始
    json比xml,更小、更快、更易解析
    保存数据 “name”:”goudan” goudan
    js\python\java\php
    json语法
    (1)数据在键值对中
    (2)键值对使用逗号分隔
    (3){}保存对象
    (4)[]保存数组
    键一般都是字符串,字符串需要用双引号引起来
    值可以是
    (1)数字(整型和浮点)
    (2)字符串,只能在双引号中
    (3)bool值,true和false
    (4)对象 {}
    (5)数组 []
    (6)null 空值

    动态数据加载:数据是首先通过ajax发送请求,然后得到json格式的响应内容,然后解析json格式的响应内容,通过js的DOM操作动态的添加标签进去

    https://sclub.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98vv2206&productId=100000287141&score=0&sortType=5&page=2&pageSize=10&isShadowSku=0&rid=0&fold=1