zoukankan      html  css  js  c++  java
  • 网页提取的工具

    1.xpath
    什么是xpath?
    xml是用来存储和传输数据使用的
    和html的差异:
    (1) html用来显示数据,xml是用来传输数据的
    (2) html标签是固定的,xml标签是自定义的
    XPath 是一门在 XML 文档中查找信息的语言,他是一种路径表达式

    常见的路径表达式
    // :不考虑位置的查找
    ./ :从当前节点往下面查找
    @ :选取属性

    示例:
    /bookstore/book 选取根节点bookstore下的所有直接子节点book
    //book 选取所有book
    bookstore//book 查找bookstore下的所有book节点
    /bookstore/book[1] 选取bookstore下的第一个子元素book
    /bookstore/book[last()] 选取bookstore下的最后一个子元素book
    /bookstore/book[position()<3] 选取bookstore下的前两个子元素book
    //title[@lang] 选取所有带有lang属性的title
    //title[@lang='eng'] 选取所有带有lang属性值为eng的title
    * 任何元素节点

    属性定位 //input[@id='kw']
    层级定位 //div[@id="head"]/div/div[3]/a[1] 通过子节点和索引(从1开始) 进行定位

    逻辑运算 and
    # 包含class属性,并且属性中带有's'
    模糊匹配 //input[contains(@class,"s")]
    //input[starts-with(@class,"s")]
    取文本 //div[@id="u1"]/a[5]/text()
    # 获取div下面的所有text,包括其他标签中的文本
    //div[@id="u1"]//text()
    取属性 //div[@id="u1"]/a[5]/@href

    2.bs4 BeautifulSoup
    (1) 根据标签名查找

    (2)
    from bs4 import BeautifulSoup

    # 生成对象
    soup = BeautifulSoup(open('soup.html', encoding="utf8"), 'html.parser')
    # print(type(soup))
    # print(soup.a) # 只能找到第一个符合条件的标签
    # print(soup.a['href']) # 利用字典的形式获取标签中的属性 soup.a.attrs['href']
    # print(soup.a.attrs) # 返回一个所有属性组成的字典
    # print(soup.a.string) # 获取标签的内容 soup.a.text soup.a.get_text() 获取的结果相同
    # print(soup.a.get_text())
    # print(soup.a.text)
    # 上述三个有何差异呢?
    # print(soup.div.string) # None 如果标签中还有标签,那么string获取None,而其他两个,可以获取文本
    # print(soup.div.text)
    # print(soup.div.get_text())
    # find方法
    # print(soup.find('a')) # soup.a 找到第一个符合条件的标签
    # print(soup.find('a', class_="du")) # class为关键字 class_="xxx"
    # div = soup.find('div', class_='tang') # 不仅soup可以使用find方法,普通的div也可以使用find
    # print(div.find('a', class_='du'))
    # findall 方法
    # print(soup.find_all('a')) # 以列表
    div = soup.find("div", class_='tang')
    # print(div.find_all('a'))
    # print(div.find_all(['a', 'b'])) # 寻找div标签下的a和b标签
    # print(div.find_all('a', limit=2)) # 取前两个a标签

    # select 根据选择器选择指定的内容
    # 常见的选择器:标签选择器,类选择器,id选择器,组合选择器,层级选择器,伪类选择器,属性选择器
    # select选择器永远返回的是列表
    # print(soup.select('.tang > ul > li > a')[2]) # 寻找class=tang下面的子标签ul下面的li下面的a标签
    # print(soup.select('#feng')[0].string) # 查找id=feng的标签
    print(div.select('.du'))

    3.jsonpath:用来解析json数据使用的
    Python处理json格式

    import json
    json.dumps() # 将字典或列表转化为json格式
    json.loads() # 将json格式字符串转化为python对象
    # json.dump(list,open("json.txt","w",encoding="utf8"))
    json.dump() # 将字典或列表转化为json格式并且写入文件中
    json.load() # 从文件中读取json格式字符串,转化为python对象
    前端处理:
    json.parse('json格式字符串') # 将json格式字符串转化为js对象
    eval('('+ json格式字符串 + ')')
    安装
    import jsonpath
    import json

    # 将json字符串转化为python对象
    obj = json.load(open("book", "r", encoding='utf8'))
    # 查找第一本书的作者
    # ret = jsonpath.jsonpath(obj, '$.store.book[0].author')
    # 查找book下面的所有作者
    # ret = jsonpath.jsonpath(obj, '$.store.book[*].author')
    # 查找所有作者
    # ret = jsonpath.jsonpath(obj, '$..author')
    # 查找store下的所有对象
    # ret = jsonpath.jsonpath(obj, '$.store.*')
    # 查找store下的所有price
    # ret = jsonpath.jsonpath(obj, '$.store..price')
    # 查找第三本书,返回一个列表
    # ret = jsonpath.jsonpath(obj, '$..book[2]')
    # 查找最后一本book
    # ret = jsonpath.jsonpath(obj, '$..book[(@.length-1)]')
    # 查找第一,二本书
    # ret = jsonpath.jsonpath(obj, '$..book[0,1]')
    # ret = jsonpath.jsonpath(obj, '$..book[:2]')
    # 过滤出所有包含isbn属性的书
    # ret = jsonpath.jsonpath(obj, '$..book[?(@.isbn)]')
    # 查找所有price<10的书
    # ret = jsonpath.jsonpath(obj, '$..book[?(@.price<10)]')

    # print(ret)

  • 相关阅读:
    综合实例-文本框类部件
    输入掩码
    WebP,Jpeg,Png格式图片的编解码区别
    美团点评提前批面经
    Android中AIDL的使用详解,如何发起回调?
    JNI在Android中的实践NDK:Hello World
    Timer实现原理
    百度秋招凉经:客户端测开
    阿里秋招面经:Android客户端开发工程师
    Picasso和Glide区别
  • 原文地址:https://www.cnblogs.com/nxrs/p/11372390.html
Copyright © 2011-2022 走看看