Python3.x的BeautifulSoup解析html常用函数

Python3.x的BeautifulSoup解析html常用函数

1,初始化:

soup = BeautifulSoup(html) # html为html源代码字符串,type(html) == str

2,用tag获取相应代码块的剖析树:

#当用tag作为搜索条件时,我们获取的包含这个tag块的剖析树:
#<tag><xxx>ooo</xxx></tag>
#这里获取head这个块
head = soup.find(‘head‘)
# or
# head = soup.head
# or
# head = soup.contents[0].contents[0]

contents属性是一个列表,里面保存了该剖析树的直接儿子,如:

html = soup.contents[0] # <html> ... </html>
head = html.contents[0] # <head> ... </head>
body = html.contents[1] # <body> ... </body>

3,用contents[], parent, nextSibling, previousSibling寻找父子兄弟tag:

  beautifulSoup提供了几个简单的方法直接获取当前tag块的父子兄弟。

 假设我们已经获得了body这个tag块,我们想要寻找<html>, <head>, 第一个<p>, 第二个<p>这四个tag块:

# body = soup.bodyhtml = body.parent # html是body的父亲
head = body.previousSibling # head和body在同一层,是body的前一个兄弟
p1 = body.contents[0] # p1, p2都是body的儿子,我们用contents[0]取得p1
p2 = p1.nextSibling # p2与p1在同一层,是p1的后一个兄弟, 当然body.content[1]也可得到

print(p1.text)
# u‘This is paragraphone.‘
print(p2.text)
# u‘This is paragraphtwo.‘
#  注意:1,每个tag的text包括了它以及它子孙的text。2,所有text已经被自动转
#为unicode,如果需要,可以自行转码encode(xxx)

4,用find, findParent, findNextSibling, findPreviousSibling寻找祖先或者子孙 tag:

  find方法(我理解和findChild是一样的),就是以当前节点为起始,遍历整个子树,找到后返回。

 而这些方法的复数形式,会找到所有符合要求的tag,以list的方式放回。他们的对应关系是:find->findall, findParent->findParents, findNextSibling->findNextSiblings...,如:

print soup.findAll(‘p‘)
# [<p id="firstpara" align="center">This is paragraph <b>one</b>.</p>, <p id="secondpara" align="blah">This is paragraph <b>two</b>.</p>]

5,find的几种用法,其他的类比: find(name=None, attrs={}, recursive=True, text=None, **kwargs),文档参考:          https://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html#The%20basic%20find%20method:%20findAll%28name,%20attrs,%20recursive,%20text,%20limit,%20**kwargs%29)

 (1).搜索tag:

find(tagname)        # 直接搜索名为tagname的tag 如:find(‘head‘)
find(list)           # 搜索在list中的tag,如: find([‘head‘, ‘body‘])
find(dict)           # 搜索在dict中的tag,如:find({‘head‘:True, ‘body‘:True})
find(re.compile(‘‘)) # 搜索符合正则的tag, 如:find(re.compile(‘^p‘)) 搜索以p开头的tag
find(lambda)         # 搜索函数返回结果为true的tag, 如:find(lambda name: if len(name) == 1) 搜索长度为1的tag
find(True)           # 搜索所有tag

 (2),搜索属性(attrs):

find(id=‘xxx‘)                                  # 寻找id属性为xxx的
find(attrs={id=re.compile(‘xxx‘), algin=‘xxx‘}) # 寻找id属性符合正则且algin属性为xxx的
find(attrs={id=True, algin=None})               # 寻找有id属性但是没有algin属性的

 (3),搜索文字(text):

           注意:文字的搜索会导致其他搜索给的值如:tag, attrs都失效。

方法与搜索tag一致;

 (4),recursive, limit:

      recursive=False表示只搜索直接儿子,否则搜索整个子树,默认为True。

     当使用findAll或者类似返回list的方法时,limit属性用于限制返回的数量,如findAll(‘p‘, limit=2): 返回首先找到的两个tag

原文地址:https://www.cnblogs.com/lizm166/p/8137046.html

时间: 2024-10-09 12:13:15

Python3.x的BeautifulSoup解析html常用函数的相关文章

Python3.x:BeautifulSoup()解析网页内容出现乱码

Python3.x:BeautifulSoup()解析网页内容出现乱码 问题: start_html = requests.get(all_url, headers=Hostreferer) BeautifulSoup(start_html.text, "html.parser") 出现乱码: 解决方案: 将BeautifulSoup(start_html.text, "html.parser")替换为BeautifulSoup(start_html.content

Python3 urllib.parse 常用函数示例

Python3 urllib.parse 常用函数示例 http://blog.51cto.com/walkerqt/1766670 1.获取url参数. >>> from urllib import parse >>> url = r'https://docs.python.org/3.5/search.html?q=parse&check_keywords=yes&area=default' >>> parseResult = pa

162个php常用函数基础用法(个人整理)

PHP常用函数总结 数学函数 1.abs(): 求绝对值 $abs = abs(-4.2); //4.2 数字绝对值数字 2.ceil(): 进一法取整 echo ceil(9.999); // 10 浮点数进一取整 3.floor(): 舍去法取整 echo floor(9.999); // 9 浮点数直接舍去小数部分 4.fmod(): 浮点数取余 ? 1 2 3 4 $x = 5.7; $y = 1.3; // 两个浮点数,x>y 浮点余数 $r = fmod($x, $y); // $r

2015-8-25-关于后端的知识以及常用函数整理

首先结构一般是分为B/S(Browser/Server)和C/S(Client/Server)的,我们所用的是基于B/S结构的. 其中这里的B主要是一些控件的组成的页面,主要是由JScript控制的, 其中的S主要是由SSL代码控制的,又分为Server Script和Data Sources,首先来说说两者的一些区别(Server Script用SS代替,Data Sources用DS代替): 对于我们这个LIMS系统来说,最常用的操作就是对数据库的增.删.改.查,其中的“查”,也就是从数据库

LoadRunner中常用函数参考手册

基础篇1:LoadRunner中常用函数参考手册 常用函数列表 web_url web_submmit_form VS web_submmit_data VS web_custom_request web_custom_request web_concurrent_start(NULL); web_concurrent_end(NULL); ============================分割线================================ 1. web_url Loa

PHP常用函数备用

刚学习php的时候,我也为记忆php函数苦恼不已.认为干嘛记忆这么枯燥无味的东西呢?用的时候查一下手册不就行了吗?但是当时因为身在辅导机构,还是记忆了一大堆自己并不感兴趣的函数. 由此就想起来,小的时候背诵的那些古诗词.小的时候并不能理解这古诗词里面的意思.可是随着慢慢的长大,到了一处陌生的城市,每逢节日不能回家和父母团聚的时候,我们就会不由自主的嘀咕起来:独在异乡为异客,每逢佳节倍思亲.当我们与朋友聚会的时候,我们会感叹:今朝有酒今朝醉,莫使金樽空对月.当我们于朋友离别的时候,我们会说:海内存

pandas 常用函数整理

pandas常用函数整理,作为个人笔记. 仅标记函数大概用途做索引用,具体使用方式请参照pandas官方技术文档. 约定 from pandas import Series, DataFrame import pandas as pd import numpy as np 带.的为Series或者DataFrame对象的方法,只列举了部分关键字参数. 1.基础 .values 获取值,返回array对象 .index 获取(行)索引,返回索引对象 Series( index=) 创建Series

PHP基本常用函数学习

array_change_key_case — 返回字符串键名全为小写或大写的数组array_chunk — 将一个数组分割成多个array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值array_count_values — 统计数组中所有的值出现的次数array_diff_assoc — 带索引检查计算数组的差集array_diff_key — 使用键名比较计算数组的差集array_diff_uassoc — 用用户提供的回调函数做索引检查来计算数组的差

PHP常用函数和常量

PHP常用系统常量 __FILE__ 文件的完整路径和文件名.如果用在被包含文件中,则返回被包含的文件名.自 PHP 4.0.2 起,总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径. __DIR__ 文件所在的目录.如果用在被包括文件中,则返回被包括的文件所在的目录.它等价于 dirname(__FILE__).除非是根目录,否则目录中名不包括末尾的斜杠.(PHP 5.3.0中新增) __FUNCTION__ 函数名称(PHP 4.3.0 新