xpath工具 浏览器安装XPath Helper
/ 根目录
//a 根目录开始 所有a标签 无论是什么位置,就算当前已经在次级目录也会回到根目录
.//a 当前目录内 所有a标签
./a 当前目录内 下一层的a标签
.当前节点
..父节点
定位标签
按单条件//a[@id=123]
按多条件//a[@class='link-title link-statistics' and @data-id='35498388' and @href] #最后一个意思是标签内存在href属性
按位置/html/body/p[last()]/a") last()只能用在路径下, //全局搜索的没有位置 因此没有last
/html/body/p[last()-1]/a") 倒数第二个p下的a标签
按位置//a[@class='abc']/span[2]/text() class为abc的a标签下的第二个span的text
//span[@id='comment_score']/span[@class='item'][2] #第二个class为item的span标签
按内容//a[contains(text(),"下一页")]
查标签内
查属性
"//a/@href" 所有a标签下的href值
"body//a[@id='10086']/@class" ID为10086的a标签内的属性class的值 值用引号括起来
"body//a[@id='10086']//@class" ID为10086的a标签内和下面的属性class的值
查文本
body//a[@id=123]/text()
scrapy/requests内使用
直接就是scrapy里spider.parse()输入的response
response.xpath("body//a[@id=123]/text()").getall() 返回全部
response.xpath("body//a[@id=123]/text()").getall()[0] 返回全部后的第一个
response.xpath(xpath语句)[0].attrib 查看里面的属性 字典形式
requests 中使用
import requests
from lxml import etree
html_text = requests.get(url='https://www.baidu.com')
html_tree = etree.HTML(html_text)
xpath_str = '/html/head/meta[1]/@charset'
xpath_str = '/html/head//meta[1]/@charset'
xpath_str = '//meta[1]/@charset'
xpath_str = '//meta[position()<3]/@charset'
xpath_str = '//meta[2]/@*' #通配符
xpath_str = "//meta[@charset='utf-8']/parent::*" 选所有父节点
xpath_str = "//meta[@charset='utf-8']/parent::a[@id=123]" 选所有父节点中的id为123的a节点
xpath_str = "//a[@id='digg_control_16347706']/ancestor::footer/@*" 那个a标签的祖先中的footer标签下的所有属性值
xpath_str = "//a[@id='digg_control_16347706']/ancestor::footer/@class" 那个a标签的祖先中的footer标签下的class属性的值
aaa = html_tree .xpath(xpath_str)