一周目,爬虫 十日
Xpath解析器
1 导入模块的方法
1导入模块
from lxml import etree
2启用xpath解析器
html = etree.HTML(doc)
2 xpath解析器使用
查找标签
1 *表示所有
a = html.xpath('//*') # 匹配所有的标签
2 //表示子标签后面更标签名
a = html.xpath('//head') # 匹配所有的head标签
3 子标签与后代标签
a = html.xpath('//div/a') # 匹配div标签内部所有的儿子a标签
a = html.xpath('//body/a') # 没有符合条件的儿子a
a = html.xpath('//body//a') # 匹配div标签内容所有的后代a标签
a = html.xpath('//body//a') # 也可以匹配到
4 @表示属性查找
a=html.xpath('//body//a[@href="image1.html"]')
# 属性查找 获取body内部所有的href=image1.html后代a标签
a = html.xpath('//body//a[1]') # 取第一个body内部的a标签
5 ..表示返回上一级的父标签
a = html.xpath('//body//a[@href="image1.html"]/..')
# 表示获取所有的href=image1.html后代a标签的上一级父标签
a = html.xpath('//body//a[1]/parent::*')
# 查找父标签的其他写法
查找文本
1 获取标签内部文本
a = html.xpath('//body//a[@href="image1.html"]/text()')
#获取body内部属性为image.1的a标签的文本
a = html.xpath('//body//a/text()')
## 获取body内部所有后代a内部文本,并以列表展示
2 属性查找
a = html.xpath('//body//a/@href')
#展示body内部所有子标签a的herf的属性
3 索引查找,从1开始而非0开始
a = html.xpath('//body//a[2]/@href')
# 展示body内部第二个a标签的herf属性
4 属性单个以及多个查找,=表示直接查找,用contains表示包含
a=html.xpath('//body//a[@class="li"]')
# 查找class只有等于li的a标签
a = html.xpath('//body//a[contains(@class,"li")]/text()')
# 查找class含有li的a标签的文本
5 多个属性匹配,可用关系and和or
a = html.xpath('//body//a[contains(@class,"li") or @name="items"]')
# or,关系一个成立
a = html.xpath('//body//a[contains(@class,"li") and @name="items"]/text()')
# and 关系都成立
6 反向取
a = html.xpath('//a[last()]/@href')
#取最后一个,不写默认为0,从0开始
a = html.xpath('//a[last()-2]/@href')
#取最后第三个
7 按位数取 关键词 position()
a = html.xpath('//a[position()<3]/@href')
# 取位数小于3的,即取前两位
了解补充
# 1 节点轴选择
# ancestor:祖先节点
# 使用了* 获取所有祖先节点
a = html.xpath('//a/ancestor::*')
# # 获取祖先节点中的div
a = html.xpath('//a/ancestor::div')
# attribute:属性值
a = html.xpath('//a[1]/attribute::*') # 查找a标签内部所有的属性值
# child:直接子节点
a = html.xpath('//a[1]/child::*')
# descendant:所有子孙节点
a = html.xpath('//a[6]/descendant::*')
# following:当前节点之后所有节点
a = html.xpath('//a[1]/following::*')
a = html.xpath('//a[1]/following::*[1]/@href')
# following-sibling:当前节点之后同级节点
a = html.xpath('//a[1]/following-sibling::*')
a = html.xpath('//a[1]/following-sibling::a')
a = html.xpath('//a[1]/following-sibling::*[2]/text()')
a = html.xpath('//a[1]/following-sibling::*[2]/@href')
print(a)
3 用模块打开游览器查询
from selenium import webdriver from selenium.webdriver.common.keys import Keys # 键盘按键操作 import time bro = webdriver.Chrome() # 打开淘宝 bro.get('https://www.taobao.com/') # 查找搜索框标签 input_tag = bro.find_element_by_id('q') # 输入文本内容 input_tag.send_keys('iphone手机') time.sleep(1) # 点击搜索 input_tag.send_keys(Keys.ENTER) time.sleep(5) # 关闭浏览器 bro.close()