Python之BeautifulSoup常用详细使用

因工作需要,日常工作中有不少时间是用在了反复登陆内网。

故详细研究测试了BeautifulSoup的用法,总结下来备用爬网页之需。

首先是导入模块并初始化了:

 
from bs4 import BeautifulSoup
soup=BeautifulSoup(opener)

#1、tag标签法
如果一层层的标签包下去,只取每层标签第一个,或只有唯一一个时,可以用

soup.head.title


但并行多个同名标签的则不能title[2]之类查找

#2、contents法
根据文档树进行搜索,返回标记对象(tag)的列表,注意,直接.contents,返回的是列表,不是单一元素
使用contents向后遍历树,使用parent向前遍历树

共两种用法:

soup.contents

soup.contents[x].contents


返回值是包含html标签全部内容的列表。比如可能是三元素:[u‘\n‘,‘<html>xxxx</html>‘,u‘\n‘]
soup.contents[x]则是对列表各元素值的获取了

soup.contents[x].contents


返回值是目标标签的下一层(即为该标签为父,则抓取到的都是子的列表)全部标签的列表。这里如果x取错,可能会导致
错误,因为取错则生不成列表,后面contents会弹错。

1 soup.contents[1]=uHTML

2 soup.contents[2]=u\n

3 soup.contents[3]=<html>...</html> 

soup.contents[3].contents=[u\n,<head>...</head>,u\n,<body>...</body>,u\n]


以此类推,soup.contents[3].contents[3]=肯定是上述列表中的第四个元素body。

#3、.next法
只能针对单一元素进行.next,或者说是对contents列表元素的挨个清点。
比如

soup.contents[1]=uHTML
soup.contents[2]=u\n

则soup.contents[1].next等价于soup.contents[2]

#搜索法

find(name=None, attrs={}, recursive=True, text=None, **kwargs)

主要2个:.find(‘p‘),.findAll(‘p‘)
find返回的是字符串值,而且是返回从头查找到的第一个tag对。但是如果这第一个tag对包括大量的内容,父等级很高,则同时其内部所包含的

此级标签也全部都find

findAll返回值是个列表,如果发现了一个同名标签内含多个同名标签,则内部的标签一并归于该父标签显示,列表其他元素也不再体现那些内含

的同名子标签。
比如:

soup.findAll(onclick=document.location...)
    soup.findAll(attrs={style:routline:none;}) #用来查找属性中有style=‘outline:none;的标签体。


#4、.attrs[x]获取属性值法
在上述各种方法找到唯一的标签体之后,可以通过对标签实施attrs,得到一个内部属性的列表。
在标签后面新增.attrs[‘id‘]等等即可取得该标签内部id的属性值
比如:

soup.contents[3]==<meta abc=god href=/>
soup.contents[3].attrs=={abc:god,href:/}
soup.contents[3].attrs[1]=/

 



Python之BeautifulSoup常用详细使用,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。