1 html_doc = "<p class='body strikeout' id='zhangsan'></p>" 2 sp = BeautifulSoup(html_doc,"html.parser") 3 print(sp.p['class']) 4 #['body','strikeout'] 5 print(sp.p['id']) 6 #zhangsan 7 8 html_doc = "<p>Back to the <a rel="index">homepage</a></p>" 9 #想要得到a标签的rel属性值 10 print(sp.a['rel']) 11 #['index'] 12 13 .string 只能获取子标签是是0个或者1个的内容 14 “<p>123<a href="index">abc</a></p>” 15 sp.p.string #None 16 sp.a.string #abc 17 “<p><a href="index">abc</a></p>” 18 sp.p.string=sp.a.string #abc 19 20 #获取兄弟节点 21 “<p class="st">123<a rel="index">homepage</a><div rel="bey">abc</div><a rel="index">def</a></p>” 22 a_sp = sp.a 23 print(a_sp.next_sibling)#得到div节点 24 #parent节点同理 25 #.previous_sibling 上一个节点 26 27 28 #获取所有兄弟节点,迭代 29 “<p class="st">123<a rel="index">homepage</a><div rel="bey">abc</div><a rel="index">def</a></p>” 30 for i in sp.find("a").next_siblings: 31 print(i) 32 #<div rel="bey">abc</div><a rel="index">def</a> 33 34 #下一个节点,有可能与next_sibling相同也可不相同 35 “<p class="st">123<a rel="index">homepage</a><div rel="bey">abc</div><a rel="index">def</a></p>” 36 sp.find("a").next_element #homepage 37 sp.find("a").next_element.next_element.next_element #<div rel="bey">abc</div> 38 sp.find("a").next_element.next_element.next_element.next_element #abc 39 #next_elements 结果就是next_element结果的迭代 40 41 #find(re.compile("^b"))使用正则表达式查找以b开头的标签也就是body 42 43 #True 44 for i in sp.find(True): 45 print(i) 46 #匹配所有子节点 47 48 #find_all根据id、class查找节点,当有多个属性值的时候,要class保证值的顺序否则匹配不到结果 49 sp.find_all("p",class_="sister") 50 sp.find_all(id="link1") 51 sp.find_all(class_="sister") 52 53 #查找url中带有elis的连接 54 sp.find_all(href=re.compile("elis")) 55 56 #查找页面中指定位置的所有href 57 for i in sp.find("div",class_="xiaoba").find_all("a"): 58 print(i.get("href")) 59 60 #find_all的attrs参数 搜索自定义属性的标签,其中attrs的值是dist 61 sp.find_all(attrs={"data-info":"xiaobai"}) 62 63 #通过标签中的值来过滤标签 64 sp.find_all("a",text="xiaobai")#筛选值是xiaobai的标签 65 66 #limit限制返回结果的条数 67 sp.find_all("a",limit=2)返回前两条数据 68 69 #查找直接子标签 70 sp.select("p > a")#p标签的直接子标签a,可能是多个或一个,返回列表,是直接子标签 71 sp.select("p > a:nth-of-type(1)")#返回第一个直接子标签,从1开始 72 73 #查找子标签下的指定子标签,id值或class的值作为查找条件,直接子标签 74 sp.select("div > .class_name") 75 sp.select("div > #id_name") 76 sp.select("div > ul > li > span > b")#支持连贯查询 77 78 #按照css类名查找 79 sp.select(".class_name"),返回列表 80 81 #id查找 82 sp.select("#id_name") 83 84 #标签名、class_name、id_name组合查找元素 85 sp.select("a.class_name") 86 sp.select("a#id_name") 87 88 #标签名、属性名组合 89 sp.select("a[data-info]")#查找a标签中带有data-info属性的a标签 90 sp.select("a[data-info='xiaobai']")查找data-info的值是xiaobai的标签 91 #还支持类似正则表达式的用法 92 sp.select("a[data-info$="is"]")#查找属性值是以is结尾的标签 93 sp.select("a[data-info^="is"]")#开头