# -*- coding:utf-8 -*- from bs4 import BeautifulSoup import codecs # BeautifulSoup 是python支持第三方的解析包,用于解析HTML网页,提取信息 # lxml 第三方的解析包,解析html 速度比较快,功能强大 ,底层是c语言实现 ######## 1 html 源代码 2 解析器 lxml # bs 根节点对象 bs = BeautifulSoup(codecs.open("index.html", "r", encoding="utf-8"), 'lxml') #bs 是BeautifulSoup 类型对象 print(type(bs.prettify())) print(type(bs)) print(bs.head) # 类型是Tag bs4.element.Tag子节点 print(type(bs.head)) #name 字节的名称,bs.name获取获得是【document】文件 # 对于a\p\div 等标签来数,获取的就是标签的名称 print(bs.name) print(bs.title.name) # 字符串 print(type(bs.title.name)) # # attrs获取标签节点的属性。返回的是一个key:values的字典,若是属性有多个值返回的是列表 print(bs.a.attrs) # #获取某一个属性值 print(bs.a['href']) print(bs.a["class"]) # #<class 'bs4.element.NavigableString'> 类型 节点之间的text文本 print(bs.a.string) print(type(bs.a.string)) # # # bs4 使将html代码转换为一个python对象(BeautifulSoup) # # Tag : 指的就是html 中的一个标签(包含开始标签和结束标签在内的整个标签),name。attrs, # # string # # NavigableString :指的是标签中的文本,不包含标签 print(bs.head.contents) # content 获取直接子节点,返回一个列表 print(bs.body.contents) # 根据索引从全部节点中取出某一个 title = bs.head.contents[3] print(title) print(title.string) # children 返回的是列表生成器 res = bs.body.children for ele in res: print("*****") print(ele) #descendants 获取子孙节点(包含子节点,子节点的子节点,每一个节点的内容),返回的 结果是一个生成器对象 res = bs.body.descendants for ele in res: print("...") print(ele) # 获取节点的父节点 print(bs.title.parent) # next_sibling 获取节点的下一个兄弟节点 \n 是一个字节 print(bs.meta.next_sibling.next_sibling) # previous_sibling 获取节点的上一个兄弟节点 print(bs.title.previous_sibling.previous_sibling) # # 搜索 文档树中的数据 res = bs.find_all("p") print(res) # # 能够根据多个标签名查找 es = bs.find_all(["p", "a"]) print(es) # find()函数查找惟一标签 # find_all() #经过class类名查找。不能直接写class 由于class是python关键字,使用class_代替 print(bs.find_all(class_="two")) # 2 经过css 选择器 查找标签,返回时一个列表,列表中存放是要查找的标签 # # 表明是ID .表示class print(bs.select('#data')) print(bs.select('.two')) # 找到指定的标签 print(bs.select('a[target="_blank"]')) # 找到某个标签下的指定属性值的标签 print(".....") #.表示class print(bs.select('div .spider')) print(bs.select('div #data')) """ """
查找的网页位置css
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>bs4测试网页</title> <style> <!--css选择器--> #web span{ color: red; } /*#id .class*/ /*p span 后代选择器*/ /*p>span 直接子标签*/ </style> </head> <body> <a href="http://www.baidu.com" id="top" class="one two three" target="_blank">百度一下</a> <p class="spider">qwertyui</p> <div> <p class="spider">Python爬虫工程师</p> <p id="web">Python后台工程<span>123456</span></p> <p id="data" class="two">数据分析工程师</p> </div> <a href="#" target="_blank">123</a> <a href="#">456</a> </body> </html>