XPATH语法:
1.路径查询
//:查找所有子孙节点,不考虑层级关系
/ :找直接子节点
2.谓词查询
//div[@id]
//div[@id="maincontent"]
3.属性查询
//@class
4.模糊查询
//div[contains(@id, "he")]
//div[starts‐with(@id, "he")]
5.内容查询
//div/h1/text()
6.逻辑运算
//div[@id="head" and @class="s_down"]
//title | //price
from lxml import etree # xpath解析 # (1)本地文件 etree.parse # (2)服务器响应的数据 response.read().decode('utf-8') ***** etree.HTML() # xpath解析本地文件 tree = etree.parse('070_爬虫_解析_xpath的基本使用.html') #tree.xpath('xpath路径') # 查找ul下面的li # li_list = tree.xpath('//body/ul/li') # 查找所有有id的属性的li标签 # text()获取标签中的内容 # li_list = tree.xpath('//ul/li[@id]/text()') # 找到id为l1的li标签 注意引号的问题 # li_list = tree.xpath('//ul/li[@id="l1"]/text()') # 查找到id为l1的li标签的class的属性值 # li = tree.xpath('//ul/li[@id="l1"]/@class') # 查询id中包含l的li标签 # li_list = tree.xpath('//ul/li[contains(@id,"l")]/text()') # 查询id的值以l开头的li标签 # li_list = tree.xpath('//ul/li[starts-with(@id,"c")]/text()') # 查询id为l1和class为c1的 li_list = tree.xpath('//ul/li[@id="l1" and @class="c1"]/text()') # li_list = tree.xpath('//ul/li[@id="l1"]/text() | //ul/li[@id="l2"]/text()') # 判断列表的长度 print(li_list) print(len(li_list))
jsonpath语法:
bs4语法:
根据标签名查找节点
soup.a 【注】只能找到第一个a
soup.a.name
soup.a.attrs
2.函数
(1).find(返回一个对象)
find('a'):只找到第一个a标签
find('a', title='名字')
find('a', class_='名字')
(2).find_all(返回一个列表)
find_all('a') 查找到所有的a
find_all(['a', 'span']) 返回所有的a和span
find_all('a', limit=2) 只找前两个a
# (1)find # 返回的是第一个符合条件的数据 # print(soup.find('a')) # 根据title的值来找到对应的标签对象 # print(soup.find('a',title="a2")) # 根据class的值来找到对应的标签对象 注意的是class需要添加下划线 # print(soup.find('a',class_="a1")) # (2)find_all 返回的是一个列表 并且返回了所有的a标签 # print(soup.find_all('a')) # 如果想获取的是多个标签的数据 那么需要在find_all的参数中添加的是列表的数据 # print(soup.find_all(['a','span'])) # limit的作用是查找前几个数据 # print(soup.find_all('li',limit=2))
(3).select(根据选择器得到节点对象)【推荐】
# (3)select(推荐) # select方法返回的是一个列表 并且会返回多个数据 # print(soup.select('a')) # 可以通过.代表class 我们把这种操作叫做类选择器 # print(soup.select('.a1')) # print(soup.select('#l1')) # 属性选择器---通过属性来寻找对应的标签 # 查找到li标签中有id的标签 # print(soup.select('li[id]')) # 查找到li标签中id为l2的标签 # print(soup.select('li[id="l2"]')) # 层级选择器 # 后代选择器 # 找到的是div下面的li # print(soup.select('div li')) # 子代选择器 # 某标签的第一级子标签 # 注意:很多的计算机编程语言中 如果不加空格不会输出内容 但是在bs4中 不会报错 会显示内容 # print(soup.select('div > ul > li')) # 找到a标签和li标签的所有的对象 # print(soup.select('a,li')) # 节点信息 # 获取节点内容 # obj = soup.select('#d1')[0] # 如果标签对象中 只有内容 那么string和get_text()都可以使用 # 如果标签对象中 除了内容还有标签 那么string就获取不到数据 而get_text()是可以获取数据 # 我们一般情况下 推荐使用get_text() # print(obj.string) # print(obj.get_text()) # 节点的属性 # obj = soup.select('#p1')[0] # name是标签的名字 # print(obj.name) # 将属性值左右一个字典返回 # print(obj.attrs) # 获取节点的属性 obj = soup.select('#p1')[0] print(obj.attrs.get('class')) print(obj.get('class')) print(obj['class'])
标签:14,标签,指导,find,li,soup,寒假,print,id From: https://www.cnblogs.com/syhxx/p/17980768