xpath,jsonpaht简介及使用

目录

xpath语法:

1.选择节点(标签)

2."//":能够从任意节点开始选择

3.@ 符号:

1).定位元素:

2).选择某个标签的属性值:

3).并属性

4.获取文本

5.点 当前节点

附录:

图片懒加载技术

jsonpath 请参考 https://goessner.net/articles/JsonPath/


xpath语法:

导入:

from lxml import etree

# 1>本地文件:
    tree = etree.parse("文件名")
# 2>网络文件:
    tree = etree.HTML("html字符串")
    tree.xpath("xpath语句")        # 返回一个列表

xpath helper插件:帮助我们从'element'中定位数据 (goole 插件)

1.选择节点(标签)

/html/head/div : 能够选中html下的head下的所有的 div标签

2."//":能够从任意节点开始选择

//li : 表示当前页面中所有 li 标签

/html/head//li : 表示 head 下的所有 li 标签

3.@ 符号:

1).定位元素:

 //div[@class="demo"]/ul/li         
选择class = "demo" 的 div 下的ul下的li     [] 代表可以获取div这个标签中的属性

2).选择某个标签的属性值:

li/@class  可以获取到li标签的class 的值

3).并属性

input[contains(@class,"s_i")]   #所有的input,有class属性,并且属性中带有s-i的节点

4.获取文本

/a/text()  就可以获得a标签下的一层文本

/a//text()  就可以获得a标签下的所有文本

5.点 当前节点

.a  表示当前节点下的a标签

 

例子:

import urllib.request
import urllib.parse
import time
import os
import random
from lxml import etree


def handle_request(url,page):
    if page == 1:
        url = url.format("")
    else:
        url = url.format("_"+str(page))

    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36",
    }

    request = urllib.request.Request(url=url,headers=headers)

    return request

# 下载图片内容
def download_image(image_src):
    dirpath = "photo"
    if not os.path.isdir("photo"):
        os.mkdir("photo")
    # 文件名
    file_name = os.path.basename(image_src)
    file_path = os.path.join(dirpath,file_name)

    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36",
    }

    img_request = urllib.request.Request(url=image_src, headers=headers)

    img_response  = urllib.request.urlopen(img_request)

    file = open(file_path,"wb")

    file.write(img_response.read())

    file.close()

def parse_content(content):

    tree = etree.HTML(content)
    image_list = tree.xpath("//div[@class='clearfix psdk imgload']//img/@src2")

    for image_src in image_list:
        download_image(image_src)

def main():
    url = "http://sc.chinaz.com/tupian/xingganmeinvtupian{}.html"
    # url = "http://sc.chinaz.com/tupian/xingganmeinvtupian_2.html"
    star_page = int(input("起始:"))
    end_page = int(input("结束:"))
    for page in range(star_page,end_page+1):
        request = handle_request(url,page)
        # 发送请求,获取相应
        content = urllib.request.urlopen(request).read().decode()
        parse_content(content)
        time.sleep(random.randint(2,8))

if __name__ == '__main__':
    main()

 

图片懒加载技术:

懒加载技术(前端):用到的时候才加载
    实现方式:
        刚开始写代码的时候 把  <img src2="图片地址">
        用js监听用户的窗口,当img映入用户窗口时,向img新添加一个src属性,并且值为src2的图片地址

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值