2015-08-18 03:48:27 下面介绍JQUERY的父,子,兄弟节点查找方法 jQuery.parent(expr) 找父亲节点,可以传入expr进行过滤,比如$("span").parent...()或者$("span").parent(".class") jQuery.parents(expr),类似于jQuery.parents(expr),但是是查找所有祖先元素,不限于父元素 jQuery.children...(expr).返回所有子节点,这个方法只会返回直接的孩子节点,不会返回所有的子孙节点 jQuery.contents(),返回下面的所有内容,包括节点和文本。...(),返回所有之前的兄弟节点 jQuery.next(),返回下一个兄弟节点,不是所有的兄弟节点 jQuery.nextAll(),返回所有之后的兄弟节点 jQuery.siblings(),返回兄弟姐妹节点...jQuery.filter()是从初始的jQuery对象集合中筛选出一部分,而jQuery.find()的返回结果,不会有初始集合中的内容,比如$("p"),find("span"),是从元素开始找
2、遍历文档树 遍历文档树可以获得文档中的子节点、父节点、兄弟节点等标签。...要获取子节点,首先要分析子节点中的内容,一个tag标签中,通常会包含多个字符串或者多个其他的tag标签。...比如,contents是获取到一个标签之间的所有内容,同一层级的多个子节点在contents中算作列表中的一个元素。此时,可以通过.children将子节点中的同一层级的标签进行分割。 ?...每个tag都会包含父节点,比如前面采用bsobj.body.div获取节点信息,body就是div的一个父节点。...的tag对象、遍历文档树的使用 通过查找子节点、父节点等信息,可以获取到想要的标签信息 通过获取标签信息的.name、.attrs等,可以获取精确的信息 后续继续学习搜索文档树 作者:乐大爷L 链接:
attribute 的操作方法与字典相同,我们可以正常对 tag 的属性进行删除、修改等操作。 以下代码展示了 name 和 attribute 的使用方法。...descendants 将获取一个 Tag 的说有子节点,以及子节点的子节点「孙节点」。它也是一个生成器,需要通过遍历来获取内容。...如果一个 Tag 仅有一个子节点有内容「NavigableString 类型子节点」或其只有一个子节点可以使用 string 属性来获取节点内容。...strings 和 strippedstrings 返回的是生成器,需要通过迭代获取内容。 父节点 BeautifulSoup 通过 parent 和 parents 来获取 Tag 的父节点。...使用 parent 得到的是 Tag 的直接父节点,而 parents 将得到 Tag 的所有父节点,包括 父节点的父节点。
BeautifulSoup库的安装 在使用BeautifulSoup解析库之前,先简单介绍一下BeautifulSoup库并讲解如何安装BeautifulSoup库。...BeautifulSoup基本元素 上述内容讲解了获取到一个BeautifulSoup 对象后,一般通过BeautifulSoup类的基本元素来提取html中的内容。...标签内非属性字符串 Comment 标签内字符串的注释部分 BeautifulSoup的使用 通过一个小例子,学习BeautifulSoup 库如何去解析网页并提取数据。...标签 print(soup.ul) # 获取ul标签名字 print(soup.ul.name) # ul标签的父标签(上一级标签)的名字 print(soup.ul.parent.name) # ul...可以通过标签的class、id等属性去定位网页标签,此外还可以通过父级、子级关系去定位。
Tag 属性的操作方法与 Python 字典相同,获取 p 标签的所有属性代码如下,得到一个字典类型的值。它获取的是第一个段落 p 的属性及属性值。 print(soup.p.attrs) ?...前面介绍的 contents 和 children 属性仅包含标签的直接子节点,如果需要获取 Tag 的所有子节点,甚至是子孙节点,则需要使用 descendants 属性。...3.2.2 节点内容 如果标签只有一个子节点,且需要获取该子节点的内容,则使用 string 属性输出子节点的内容,通常返回嘴里层的标签内容。...3.2.3 父节点 调用 parent 属性定位父节点,如果需要获取节点的标签名则使用 parent,name 。...3.2.4 兄弟节点 兄弟节点是指和本节点位于同一级的节点,其中,next_sibling 属性是获取该节点的下一个兄弟节点,precious_sibling 则与之相反,取该节点的上一个兄弟节点,如果节点不存在
实现选择 网上大部分的教程,都是基于修改section的hearderView来实现的,但是看QQ的好友列表,style是grouped,显然不是使用section的header来处理。...- (void)reloadSections:(NSIndexSet *)sections 这次我直接使用grouped的cell来做父cell,点击后展开相应的子cell,还有动画特效。...封装测试数据 使用FMDB(或者CoreData)从objc中国获取主issue作为父级cell,文章作为subCell,具体获取使用python和BeautifulSoup,不在本次的讨论范围之内,需要的可以查看相应的资料或者留言我...,也可以在文末的项目源码里获取python代码。...但是当点击的是展开的cell下方的cell时,indexPath就会出现问题。像下面这样。 ? 我要点击的是2x,但是实际上点击的却是4x,问题出在哪里?
BeautifulSoup 是一个可以从 HTML 或 XML 中提取数据的 Python 库,功能强大、使用便捷,诚为朴实有华、人见人爱的数据处理工具。...,Two,Three 某个节点的子节点往往比我们看到的多,因为在那些可见的子节点之外的换行、空格、制表位等,也都是某节点的文本型子节点 节点对象、名称、属性 使用lxml解析器生成一个 BeautifulSoup...' >tag.p.name 'p' 事实上,我们可以不用在意标签的父级是谁,直接从soup得到节点对象: > soup.p.name 'p' > soup.img['src'] 'demo.jpg' >....contents, .children,.descendants 都可以取得节点的子节点,但用法各不相同: .contents, .children 只能取得直接子节点,.descendants 则可以递归取得所有子节点....contents 返回的子节点的列表,.children,.descendants 返回的是迭代器 父节点 .parent 属性来获取某个元素的父节点: >>> soup.p.parent.name
因为绝对定位的盒子是拼爹的,所以要和父级搭配一起来使用。 定位口诀 —— 子绝父相 刚才咱们说过,绝对定位,要和带有定位的父级搭配使用,那么父级要用什么定位呢?...子绝父相 —— 子级是绝对定位,父级要用相对定位。 子绝父相是使用绝对定位的口诀,要牢牢记住! 疑问:为什么在布局时,子级元素使用绝对定位时,父级元素就要用相对定位呢?...父级盒子应该使用相对定位,因为相对定位不脱标,后续盒子仍然以标准流的方式对待它。 如果父级盒子也使用绝对定位,会完全脱标,那么下方的广告盒子会上移,这显然不是我们想要的。...结论:父级要占有位置,子级要任意摆放,这就是子绝父相的由来。...案例小结: 子绝父相 —— 子元素使用绝对定位,父元素使用相对定位; 与浮动的对比: 绝对定位:脱标,利用边偏移指定准确位置; 浮动:脱标,不能指定准确位置,让多个块级元素在一行显示。
requests库是通过封装urllib库的一个HTTP请求库,可以实现urllib绝大部分的功能且使用性高。BeautifulSoup库是第三方库,用来提取xml/html中的数据。...- Tag对象:与html/xml中的tag相同;包含多种方法和属性; - `tag.name` 获取tag的名字 - `tag.attributes` 获取标签的某个属性值`tag['class...`取方式,获取子节点以及子节点的子节点直至没有子节点,但这种方法只可以获取第一个子节点;可以使用`.find_all()`可以当前节点下指定的所有tab节点 `.contents` 将当前tag的子节点以列表方式输出...`.children` 实现对tag子节点进行循环 `.descendants` 实现对所有子孙节点的递归循环 `.string` 当tag只有一个字符串对象时使用 `.strings` tag包含多个字符串使用...,循环获取;可以使用`.stripped_strings`去除多余的空白内容 `.parent` 当前节点的父节点 `.parents` 递归获取元素的所有父节点 `.next_sibling` 遍历所有兄弟节点
目前还两种代替其的办法,一种是使用 Xpath 神器,另一种就是本文要讲的 BeautifulSoup。...5 处理上下关系 从上文可知,我们已经能获取到节点对象,但有时候需要获取其父节点或者子节点的内容,我们要怎么做了?...这就需要对parse tree进行遍历 (1)获取子节点 利用.children属性,该属性会返回当前节点所以的子节点。...但是它返回的类型不是列表,而是迭代器 (2)获取所有子孙节点 使用.descendants属性,它会返回所有子孙节点的迭代器 (3)获取父节点 通过.parent属性可以获得所有子孙节点的迭代器 (4)...获取所有父节点 .parents属性,也是返回所有子孙节点的迭代器 (5)获取兄弟节点 兄弟节点可以理解为和本节点处在统一级的节点,.next_sibling属性获取了该节点的下一个兄弟节点,.previous_sibling
) 3.console.log(my$("dv1").offsetLeft); 获取的是元素距离左边位置的值(子元素脱标,父级元素没有脱标,父级元素 的margin和padding和border...这些和子级元素的left没有关系) 如果父元素和子元素都没有脱离文档流的情况下: offsetLeft:父级元素的margin+父级元素的padding+父级元素的border+子 级元素的margin...4.console.log(my$("dv1").offsetTop);(没有脱离文档流) 父级元素的margin+父级元素的padding+父级元素的border+子级元素的margin 5.offsetParent...三大系列:-------- 1.offset系列 offsetLeft:获取的是元素距离左边的位置(父级元素margin,父级的padding, 父级元素border,自身的margin-...---父级和子级元素没有脱标) offsetTop:获取的是元素里上面的位置 offsetWidth:获取元素的宽度,有边框 offsetHeight:获取元素的高度,有边框 2.scroll系列
创建一个bs实例: # 直接打开文件 soup = BeautifulSoup(open("index.html")) # 使用字符串创建 soup = BeautifulSoup("...BeautifulSoup(markup, "html5lib") Tag对象属性: # 获取子tag,变量名与html或xml标签相同,只获取第一个 # 例如h2,p Tag.tag_name...# 的标签名 Tag.name # html属性 # 例如id,class tag['id'] # 获取所有属性,返回一个字典 tag.attrs # 获取tag中的字符串(当tag中只有一个字符串时生效...,删除空格与换行 tag.stripped_strings # 获取所有子节点,返回一个列表 tag.contents # 子节点生成器,可对子节点进行循环 tag.children # 遍历获取所有子孙节点...,返回一个列表 tag.descendants # 获取父节点 tag.parent # 递归获取父节点,返回一个列表 tag.parents # 获取兄弟节点 tag.previous_sibling
Tag属性操作方法与Python字典相同,获取p标签的所有属性代码如下,得到一个字典类型的值,它获取的是第一个段落p的属性及属性值。...你可能已经猜到了,使用string属性即可获取标签与之间的内容。...---- 2.节点内容 如果标签只有一个子节点,需要获取该子节点的内容,则使用string属性,输出子节点的内容,通常返回最里层的标签内容。...---- 3.父节点 调用parent属性定位父节点,如果需要获取节点的标签名则使用parent.name,代码如下所示: p = soup.p print(p.parent) print(p.parent.name...---- 3.搜索文档树 搜索文档树作者主要讲解findall()方法,这是最常用的一种方法,而更多的方法与遍历文档树类似,包括父节点、子节点、兄弟节点等,推荐读者下来从官网自行学习。
子绝父相 这个“子绝父相”太重要了,是我们学习定位的口诀,时时刻刻记住的。 这句话的意思是 子级是绝对定位的话, 父级要用相对定位。...就是说, 子级是绝对定位,父亲只要是定位即可(不管父亲是绝对定位还是相对定位,甚至是固定定位都可以),就是说, 子绝父绝,子绝父相都是正确的。...可以得出如下结论: 因为子级是绝对定位,不会占有位置, 可以放到父盒子里面的任何一个地方。 父盒子布局时,需要占有位置,因此父亲只能是 相对定位. 这就是子绝父相的由来。...四种定位总结 定位模式 是否脱标占有位置 是否可以使用边偏移 移动位置基准 静态static 不脱标,正常模式 不可以 正常模式 相对定位relative 不脱标,占有位置 可以 相对自身位置移动(自恋型...) 绝对定位absolute 完全脱标,不占有位置 可以 相对于定位父级移动位置(拼爹型) 固定定位fixed 完全脱标,不占有位置 可以 相对于浏览器移动位置(认死理型) 定位模式转换 跟 浮动一样
使用Beautiful Soup 在前面的文章中已经讲过了正则表达式的使用方法了,但是如果正则表达式出现问题,那么得到的结果就不是我们想要的内容。...print(soup.p.string) 获取子节点 获取子节点也可以理解为嵌套选择,我们知道在一个节点中可能包含其他的节点,BeautifulSoup提供了许多操作和遍历子节点的属性。...(3) 兄弟节点 上面的两个了例子说明了父节点与子节点的获取方法。那假如我需要获取同级节点该怎么办呢?...find( )与find_all( )的使用方法相同。 还有其他方法选择器,在这里做一下简单的介绍。...与上面的html文本相同,具体代码如下所示: from bs4 import BeautifulSoup soup = BeautifulSoup(html_doc, 'lxml') for ul in
既然已经通过 Tag 获取到具体标签,那标签的内容就可以通过 NavigableString 拿到,使用方法特别简单: # 获取标签内容 print(soup.p.string) (3)BeautifulSoup...(2)父节点 通过.parent 得到一个父节点,.parents 得到所有父节点 使用.parent 得到一个父节点 # 定位当前节点到title current_tag = soup.head.title...# 输出当前节点的父节点 print(current_tag.parent.name) # head 使用.parents 递归得到所有的父节点 # 定位当前节点到title current_tag...返回结果 find_all 返回所有子节点,且返回列表 find 只返回搜索到的第一个子节点 (3)find_parent:搜索父节点 find_parent 搜索当前节点的父节点 find_parents...2)-(7)的参数与(1)相同,按照(1)的原理应用即可 ---- css选择器 我们在写 CSS 时,标签名不加任何修饰,类名前加点,id名前加 # 在这里我们也可以利用类似的方法来筛选元素,用到的方法是
:-自身宽度的一半; margin-top:-自身高度的一半; 使用方式: 在工作中,绝对定位"大多"配合相对定位一起使用(父相子绝) 父相:在标准流上占有位置 子绝:针对这个标准流在去移动...注意:父绝子绝的情况也有,只是很少,不要完全形成思维定式。...固定定位 position: fixed; 特性: 1.脱标 1.1.脱标的元素不占标准流的位置 1.2.不会继承父级的的宽度,内容有多个就撑多大 (不论块级还是行内) 1.3.可以直接写宽高...(不论块级还是行内) 1.4.margin:auto对于脱标元素不起作用 2.移动的出发点:浏览器窗口 (直接表现:滚动条对于固定元素没有作用) 四种定位总结 定位模式 是否脱标占有位置 是否可以使用边偏移...(父元素“都有”z-index的时候,并且值不为auto),那么子元素与子元素之间是不会再去比较的
元素的定位属性 静态定位(static) 相对定位relative(自恋型) 绝对定位absolute (拼爹型) 父级没有定位 父级有定位 子绝父相 定位的扩展 绝对定位的盒子水平/垂直居中 固定定位...绝对定位最重要的一点是,它可以通过边偏移移动位置,但是它完全脱标,不占位置。 # 父级没有定位 若所有父元素都没有定位,以浏览器为准对齐(document文档)。...# 父级有定位 绝对定位是将元素依据最近的已经定位(绝对、固定或相对定位)的父元素(祖先)进行定位。 # 子绝父相 这个“子绝父相”太重要了,是我们学习定位的口诀。...子绝父相就是指子元素设置绝对定位,而父元素设置相对定位。 换句话说:如果要对一个子元素使用定位的话,让子元素(绝对定位)以其父元素(相对定位)为标准来定位。...因为子级是绝对定位,不会占有位置, 可以放到父盒子里面的任何一个地方。 父盒子布局时,需要占有位置,因此父亲只能是 相对定位. 这就是子绝父相的由来。 <!
#获取标题标签内的内容 The Dormouse's story soup.title.parent.name soup.p #获取第一个标签p soup.p['class'] #获取第一个标签...p的class内容 soup.a #获取第一个标签a soup.find_all('a') #获取所有标签a,以列表返回 soup.find(id="link3") #根据属性查找 for...通过tag的 .children 生成器,可以对tag的子节点进行循环: for child in title_tag.children: print(child) .descendants 属性可以对所有...string="Elsie") soup.find_all("a", limit=2) #只返回2个 soup.html.find_all("title", recursive=False) #只检查1级子节点...a>] soup.select("html head title") [The Dormouse's story] soup.select("body > a") #>一级子标签
:pattern) 匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?...对所获取的匹配的引用。例如,“(.)\1”匹配两个连续的相同字符。 \n 标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,则n为向后引用。...,根标签有且仅有一个,在上述代码中就是跟标签 父标签:和子标签对应,内部包含了其他元素数据,该标签就是内部标签的父标签,如是的父标签,又是的父标签...,某些说法中,父标签的父标签..被称为上级标签或则先代标签或者先辈标签 子标签;和父标签对应,被包含的元素,就是外部元素的子标签,如是的子标签,标签是的子标签...,是的子标签;同样的子标签的子标签,也被称为后代标签 兄弟标签:两个或者多个处在相同级别的标签,有相同的父标签,如和是兄弟标签,和是兄弟标签
领取专属 10元无门槛券
手把手带您无忧上云