前言
记录使用css和xpath查找元素的基本方法。css selector
- *所有元素
- .xxx class为xxx的元素
- #xxx id为xxx的元素
- E 所有E标签
- E,F 所有E,F标签
- E F E的所有F后代
- E>F 所有E中的F标签
- E+F E之后的所有F
- E[att1=’…’][att2=’…’] 属性为…的E标签
- ^= 以…开头,$= 以…结尾,*= 包含…
- E:contains(‘xxx’) 内容包含xxx的E标签
xpath selector
- / 绝对路径 //相对路径
- E[@att1=’…’][@att2=’…’] 属性为…的E元素
- //*/E[7]/F[last()] 第8个E下的最后一个F
- | 或
- text() 文本内容
- @属性
- contains() 含,starts_with() 开头
查找元素
不同库中内置的css和xpath使用有所不同。
1.1 bs4
soup.select(<查找条件>)
soup.select(".xxx")#class为xxx的标签
soup.select("#xxx") #id为xxx的标签
1.2 lxml
<标签>.xpath("<路径>[<查找条件>]/<查找内容>")
from lxml import etree
root=etree.HTML(r.text)
a=root.xpath("//a[contains(@xxx,'yyy')]") #查找标签
a.xpath("/b/@xxx") #查找xxx属性
或root.xpath("//a[contains(@xxx,'yyy')]/b/@xxx")
2 . scrapy
response.css("<查找条件>::<查找内容>").extract()
response.css(".xxx::text").extract() #class为xxx的文本
response.css("#xxx::attr(yyy)").extract() #id为xxx的yyy属性
response.xpath("<路径>[<查找条件>]/<查找内容>")
response.xpath("//a[contains(@xxx,'yyy')]") #xxx属性为yyy的a元素
response.xpath("//a[text()='xxx']") #文本为xxx的a元素
response.xpath("//span/a").re(r'xxx',str(response.body)) #与re配合使用
3 . selenium
element=driver.find_element_by_css_selector("<查找条件>")
element=driver.find_element_by_xpath("<路径>[<查找条件>]")
element.text #文本
element.get_attribute("xxx") #属性