Python Beautiful Soup 4
Beautiful Soup 4Beautiful Soup 是一个灵活方便的网页解析库,利用它不用编写正则表达式即可方便地提取的网页信息 解析库Beautiful Soup 支持 Python 标准库中的 HTML 解析器,还支持一些第三方的解析器 from bs4 import BeautifulSoup BeautifulSoup(markup,"html.parser") # Python 标准库 BeautifulSoup(markup,"lxml") # lxml HTML 解析器 BeautifulSoup(markup,"xml") # lxml XML 解析器 = BeautifulSoup(markup,["lxml","xml"]) BeautifulSoup(markup,"html5lib") # html5lib 官方推荐使用 lxml 基本使用from bs4 import BeautifulSoup soup = BeautifulSoup(markup,"lxml") print(soup.prettify()) 对象Beautiful Soup 将复杂 HTML 文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag 对象属性标签名通过 属性标签的属性存储在字典中 from bs4 import BeautifulSoup soup = BeautifulSoup(markup,"lxml") tag = soup.div tag['id'] = 'i1' tag['class'] = ['c1','c2'] del tag['class'] print(tag.get('id')) NavigableString 对象字符串常被包含在tag内,并用 NavigableString 类包装 BeautifulSoup 对象BeautifulSoup 对象表示的是一个文档的全部内容,大部分时候,可以把它当作 Tag 对象 选择器标签选择器通过标签名可以找到第一个匹配的标签,包括它的子标签 from bs4 import BeautifulSoup soup = BeautifulSoup(markup,"lxml") print(soup.tag_name) print(soup.parent_tag.child_tag) 子孙节点contentstag的 children通过tag的 list(tag.children) == tag.contents descendants返回一个包含所有 tag 子孙节点的生成器对象 from bs4 import BeautifulSoup soup = BeautifulSoup(markup,"lxml") for i,child in enumerate(soup.children): print(i,child) 祖先节点parent通过 parents返回一个包含所有 tag 祖先节点的生成器对象 兄弟节点next_sibling & previous_sibling通过 next_siblings & previous_siblings通过 标准选择器find_allfind_all() 方法搜索当前 tag 的所有 tag 子节点,并判断是否符合过滤器的条件 find_all(name,attrs,recursive,text,**kwargs) 通过 name: find_all('div') 通过 attr: find_all(id='i1') find_all(class_='c1') find_all(id=True) find_all(href=re.compile('cnblogs.com/')) find_all(attr={'attr1': '1','attr2': '2'}) 其他find(name,**kwargs) # 返回找到的第一个 find_parents(name,**kwargs) # 对当前tag的祖先节点进行迭代,返回所有符合条件的节点 find_parent(name,**kwargs) # 对当前tag的祖先节点进行迭代,返回第一个符合条件的节点 find_next_siblings(name,**kwargs) # 对当前tag的之后的兄弟节点进行迭代,返回所有符合条件的节点 find_next_sibling(name,**kwargs) # 对当前tag的之后的兄弟节点进行迭代,返回第一个符合条件的节点 find_previous_siblings(name,**kwargs) # 对当前tag的之前的兄弟节点进行迭代,返回所有符合条件的节点 find_previous_sibling(name,**kwargs) # 对当前tag的之前的兄弟节点进行迭代,返回第一个符合条件的节点 find_all_next(name,**kwargs) # 对当前tag的之后的 tag 和字符串进行迭代,返回所有符合条件的节点 find_next(name,**kwargs) # 对当前tag的之后的 tag 和字符串进行迭代,返回第一个符合条件的节点 find_all_previous(name,**kwargs) # 对当前tag的之前的 tag 和字符串进行迭代,返回所有符合条件的节点 find_previous(name,**kwargs) # 对当前tag的之前的 tag 和字符串进行迭代,返回第一个符合条件的节点 CSS 选择器Beautiful Soup支持大部分的CSS选择器,在 Tag 或 BeautifulSoup 对象的 soup.select('#i1') # id 选择,选择 id = 'i1' 的标签 soup.select('.c1') # class 选择,选择 class = 'c1' 的标签 soup.select('body') # 标签选择,选择所有 body 标签 soup.select('body a') # 层级选择,选择 body 标签下的所有 a 标签 soup.select('body > a') # 层级选择,选择 body 标签下一层的所有 a 标签 soup.select('[attr1= "attr1"]') # 属性选择,选择所有 attr1 属性为 attr1 的标签 输出格式化输出
通过 Beautiful Soup 4 预防 XSS 攻击 <--点击查看 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |