爬虫 day 06 lxml和多线程
lxml
使用需要先导包
from lxml import etree
1.xpath基本概念
1)树:整个html(xml)代码结构就是一个树结构
2)节点:树结构中每一个元素(标签)就是一个节点
3)根节点(根元素):html或xml最外面的那个标签(元素),
xml和json一样,是一种通用的数据格式
xml是通过标签(元素)的标签内容和标签属性来保存数据的
3.xpath语法
1)创建树结构,获取树的根节点
etree.XML(xml数据)
etree.HTML(html数据)
2)根据xpath获取指定标签
节点对象.xpath(路径)
-返回路径对应的所有的标签,返回值是列表,列表中的元素标签对象(节点对象)
路径的写法:
1.绝对路径:用’/'开头的路径 -/标签在树结构中的全路径,必须从根节点开始写
2.相对路径:路径开头用.
表示当前节点,..
表示当前节点的上层节点,xpath前面谁,.
就代表谁
3.全路径:用’//'开头的路径 -在整个树结构中获取标签
注意:绝对路径和全路径的写法,以及查找方法和x.xpath(路径)中的x无关
3)获取标签内容
节点对象.xpath(获取标签的路径/text())
-获取指定路径下的所有标签的标签内容
4)获取标签属性值
节点对象.xpath(获取标签的路径/@属性名)
5)谓语(条件)
a.位置相关谓语
[N]-第N个
[last()]-最后一个
[last()-N] -最后一个减N个
[position()>N],[position()<N],[position()>=N],[position()<=N] --求多个元素,大于N的全部元素
b.属性相关谓语
[@属性名=属性值]
-获取指定属性是指定值的标签
[@属性名]
-获取有指定属性名的标签
c.子标签内容相关谓语 -根据子标签的内容筛选标签
[子标签>数据],[子标签>=数据],[子标签<数据],[子标签<=数据],[子标签=数据]
6)通配符 -写路径的时候用*来表示所有标签或属性
7)若干路径 - 同时获取多个路径的内容
路径1|路径2
多线程
进程和线程
进程:一个正在运行的应用程序就是一个进程,每个进程均运行在其专门且受保护的内存空间中
线程:线程是进程执行任务的基本单元
线程的特点:如果在一个线程中执行多个任务的时候,时候是串行执行的
多进程:一个进程中有多个线程就是多线程,多线程执行任务的时候,多个任务可以同时执行
from threading import Thread
1.创建子线程对象
线程对象=Thread(target=函数,args=元组)
a.函数-可以是普通函数函数名,也可以是匿名函数.这个函数就是需要在子线程中执行的任务
b.元组-元组中的元素就是调用函数的参数,函数需要几个参数,元组的元素就有几个,当只有一个元素的时候记得,
.
2.启动子线程 - 线程对象.statr()