XPath和多线程

XPath

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。

xml结构

描述
整个html(xml)代码结构就是一个树结构
节点树结构中的每一个元素(标签)就是一个节点
根节点(根元素)html或者xml最外面的那个标签(元素)
节点内容标签内容
节点属性标签属性

用法

描述
nodename选取此节点的所有子节点
/从根节点选取
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
.选取当前节点
. .选取当前节点的父节点
@选取属性

路径的写法

描述
绝对路径用"/"开头的路径 - /标签在树结构中的路径 (路径必须从根节点开始写)
相对路径路径开头用"."标签当前节点(xpath前面是谁,'.'就代表谁), "…"表示当前节点的上层节点
全(任意)路径用"//"开头的路径 - 在整个树中获取标签

语法:

1. 创建树结构获取树的根节点
	etree.XML(xml数据)
	etree.HTML(html数据)
	
2. 根据xpath获取指定标签	
	节点对象.xpath(路径)    -   返回路径对应的所有的标签,
								返回值是列表,列表中的元素是标签对象(节点对象)

3. 获取标签内容
	节点对象.xpath(获取标签的路径/text())        
							-   获取指定路径下所有标签的标签内容

4. 获取标签属性值
	节点对象.xpath(获取标签的路径/@属性名)

5. 谓语(条件)
	a. 位置相关谓语
		"""
		[N]     									-   第N个
		[last()]    								-   最后一个
		[last()-N]  								-   倒数第 N + 1 个  
		[position()>N]、[position()>=N]				-	第 N 个后面的所有、(包含 N)
		"""
	b.属性相关谓语
		"""
		[@属性名=属性值]      -      指定属性是指定值的标签
		[@属性名]      -   拥有指定属性的标签
		"""
	c.子标签内容相关谓语       -    根据子标签的内容来筛选标签
		"""
		[子标签名>数据]
		"""

6. 通配符  
	*						-	表示所有标签或者所有属性

7. 若干路径(|)
	路径1|路径2       		-   同时获取路径1和路径2的内容


多线程

多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。

1. 基本理论

1)进程和线程

进程: 一个正在运行的应用程序就是一个进程,每个进程均运行在其专门且受保护的内存空间中
在这里插入图片描述

线程: 线程是进程执行任务的基本单元(一个进程中的任务都是在线程中执行的)

一个进程中默认有一个线程,这个线程叫主线程。

2)线程的特点

如果在一个线程中执行多个任务,任务是串行执行的。
(当一个程序中有很多个任务的时候,如果只有一个线程,那么程序的执行效率会很低)

3)多线程

一个进程中有多个线程就是多线程。
多线程执行任务的时候,多个任务可以同时(并行)执行。

4)多线程原理

一个cpu同一时间只能调度一个线程,多线程其实是cpu快速的在多个线程之间进行切换,造成多个线程同时执行的假象。
(提高cpu利用率)

2. Python使用多线程的方法

1)Python程序中如果需要子线程,必须创建线程类(Thread)的对象。

线程对象 = Thread(target=函数, args=元组)
  a.函数 - 可以是普通函数函数名,也可以是匿名函数。这个函数就是需要子线程中执行的任务。
  b.元组 - 元组中的元素就是在子线程中调用target对应的函数的时候需要的参数

2)启动线程 - 让子线程调用对应的函数

线程对象.start()

from threading import Thread
from time import sleep
from datetime import datetime

def download(name):
    print(f'{name}开始下载:{datetime.now()}')
    sleep(2)
    print(f'{name}下载结束:{datetime.now()}')


if __name__ == '__main__':
    download('肖生克的救赎')
    download('霸王别姬')
    download('阿甘正传')

t1 = Thread(target=download, args=('肖生克救赎',))
t2 = Thread(target=download, args=('霸王别姬',))
t3 = Thread(target=download, args=('阿甘正传',))

t1.start()
t2.start()
t3.start()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值