bs4node
BeautifulSoup 是一个能够从HTML或XML文件中提取数据的Python库,它的使用方式相对于正则来讲更加的简单方便正则表达式
中文文档:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0spa
Tag3d
name:每个tag对象都有name属性,为标签的名字对象
Attributes:在HTML中,tag可能有多个属性,因此tag属性的取值跟字典相同blog
get_text():经过get_text()方法能够获取某个tag下全部的文本内容ci
find_all()文档
经过name搜索,find_all('a')能够直接查找出整个文档树中全部的a标签,并返回列表字符串
经过属性搜索,经过传递给attrs一个字典参数来搜索属性:soup.find_all(attrs={'class': 'sister'})get
经过文本搜索,soup.find_all(text="Lacie")
经过正则表达式来筛选,将re.compile编译的对象传入find_all()方法,tags = soup.find_all(re.compile("^b"))
CSS选择器
使用select(),在其中传入字符串参数,就能够使用CSS选择器的语法来找到tag
xpath
相比于BeautifulSoup,Xpath在提取数据时会更有效率
表达式
nodename 选取当前节点的全部nodename子节点
/ 根路径
// 从整个文档当中搜索,不考虑位置
. 当前节点
.. 当前节点的父节点
@ 选取属性
路径表达式
//bookstore/book[1] 选取属于bookstore子元素的第一个 book元素
//bookstore/book[last()] 选取属于bookstore子元素的最后一个book元素
//bookstore/book[|ast()-1] 选取属于bookstore子元素的倒数第二个 book元素
//bookstore/book[position0)<3] 选取最前面的两个属于bookstore元素的子元素的book元素
//title[@lang] 选取全部拥有名为lang的属性的title 元素
//title[@lang='eng'] 选取全部title 元素,且这些元素拥有值为eng的lang属性
//bookstore/book[price>35.00] 选取bookstore元素的全部book元素,且其中的price元素的值须大于35.00
//bookstore/book[price> 35.00]/title 选取bookstore元素中的book元素的全部title元素,且其中的price元素的值须大于35.00
选取未知节点
* 匹配任何元素节点 //bookstore/* 选取bookstore元素的全部子元素
@* 匹配任何属性节点 //* 选取文档中国的全部元素
node() 匹配任何类型的节点 //title[@*] 选取全部带有属性的title元素
选取多个路径
//book/title| //book/price 选取book元素的全部title和price元素
//title | //price 选取文档中全部的title和price元素
//bookstore/book/title| //price 选取bookstore元素的book元素的全部title元素,以及文档中全部的price元素
获取文本
用text()获取某个节点下的文本 //a/text()
用string()获取某个节点下全部的文本 string(//book[1])
其它
contains() 包含于 //div[contains(@id,'note')]
strats-with() 以什么开头
多个属性组合 //input(@id='ffff' and @name ='username')