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
为了提高用户体验,前端实现的是懒加载。有的加载了,有的没有加载,可视区内的图片先加载,没有出现在可视区内的,可以先不加载。
实现原理
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”
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