第九周-第二节课
css-selector
尽量避免解析路径中包含位置信息
chrome页面中内置了Jquery环境, 用$符号来表示
-
直接定位元素
-
通过id进行定位
$("#id值")
-
通过class进行定位
$(".class值")
-
通过属性名进行定位
$("标签名[属性名='属性值']") $("ul[class='gl-warp clearfix']")
-
-
获取兄弟节点
-
获取当前节点的下一个节点
-
dom提供的接口, 不属于css-selector语法
tmp = $("li[data-sku='6039832']")[0] tmp.nextElementSibling
-
通过css-selector(不建议)
$("ul[class='gl-warp clearfix'] li:first-child + li")
-
-
获取当前节点的上一个节点
-
dom提供的接口, 不属于css-selector语法
tmp = $("li[data-sku='2136538']")[0] tmp.previousElementSibling
-
-
-
获取父子节点
-
获取父节点
-
dom提供的接口, 不属于css-selector语法
tmp.parentElement
-
-
获取子节点
-
获取所有子节点
-
遍历所有符合条件的元素
$("ul[class='gl-warp clearfix'] div[class='gl-i-wrap']")
-
dom提供的接口, 不属于css-selector语法
$("ul[class='gl-warp clearfix']")[0].children
-
-
获取第一个子节点
:fist-child $("ul[class='gl-warp clearfix'] li:first-child")[0]
-
获取最后一个子节点
:last-child $("ul[class='gl-warp clearfix'] li:last-child")[0]
-
获取第N个子节点
:nth-child(索引) $("ul[class='gl-warp clearfix'] li:nth-child(5)")[0]
-
-
-
模糊匹配
-
匹配开头
^
# 匹配data-sku属性值为2开头的元素 $("li[data-sku^='2']")
-
匹配结尾
$
$("li[data-sku$='2']")
-
匹配子集
*
$("li[data-sku*='2']")
-
-
获取文本值
$("li[data-sku='6039832'] div[class='p-name p-name-type-2'] em")[0].innerText
-
获取属性值
$("ul[class='gl-warp clearfix'] li")[0].getAttribute("data-sku")
BeautifulSoup
-
安装
pip install bs4 pip install lxml
-
使用BeautifulSoup
from bs4 import BeautifulSoup def jd_search_parse(html): soup = BeautifulSoup(html, "lxml") item = soup.select("li[data-sku='6039832']")[0]
-
直接定位元素
略
-
去除空白字符
html = html.replace('\r\n', "").replace("\n", "").replace("\t", "")
-
获取兄弟节点
-
获取上一个节点
tmp_ele.previous_sibling
-
获取下一个节点
tmp_ele.next_sibling
-
-
获取父子节点
-
获取父节点
tmp_ele.parent
-
获取子节点
tmp_ele.children
-
-
模糊匹配
略
-
获取文本值
content = tmp_ele.text.strip()
-
获取属性值
value = tmp_ele.attrs["data-sku"]