基本操作区:
soup.prettify()将解码后的网页内容对象soup,转换成标准的H5格式
soup.标签名 获得第一个这个标签的内容(列如:soup.title输出
同样soup.标签1.标签2。。。可以循环,就是取第一个标签1的第一个标签2.。。
soup.标签名.name获得这个标签的名字(例如:soup.p.name,结果是p)
soup.标签名.string获得第一个这个标签的内容(不包括标签,比如soup.p.string结果是The Dormouse’s story)
soup.标签名[]获得的是第一个这个标签中,[]内对应的值,比如
The Dormouse’s story
然后print (soup.p[‘class’])结果就是’title’(类似于提取字典)soup.find(条件)找到满足find内部条件的第一条完整语句(包含标签和内容)比如print(soup.find(id=1100))对应的就是p class=“title” id=1100> The Dormouse’s story#貌似只能找id
soup.find_all(条件)#条件可以是标签名字,或者id=??等等,并且找出所有的满足项,形成一个列表。#貌似不能找class
嵌套查询,利用find_all获得的列表中的每一项,可以获得他们对应的各个参数对应信息。比如:
for link in soup.find_all(‘a’):
print(link.get(‘href’))
# http://example.com/elsie
# http://example.com/lacie
# http://example.com/tillie
(与soup.标签名[]区别在于,这个利用列表中的每一项,每一项不是soup对象,而soup.标签名[]是利用soup对象中的某个 标签来查询)
soup.get_text()获得soup对象获得的经过解析后的网页的所有内容(去除掉标签,这是和soup.prettify()的区别)
基本概念区:
soup=bf(html_doc,‘html.parser’)中soup是BeautifulSoup对象
soup.标签获得的是tag对象
soup.标签(或者什么的).string获得的是NavigableString对象,且这个对象不能被直接修改,除非利用tag.string.replace_with (字符串)才能替换修改:
tag.string.replace_with(“No longer bold”)
print(tag)
#
No longer bold
进阶区:
1、tag对象进阶:
tag.contents可以将该tag对象的所有子tag以列表形式展现,比如:
head_tag = soup.head
head_tag
#
head_tag.contents
[<title>The Dormouse's story</title>]
tag.children是一个生成器,可以就用for i in形式。将tag中的子tag作为生成器的成员:
for i in soup.body.children:
print(i)
<p class="title">Once upon a time there were three little sisters; and their names were
<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and
<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>;
tag.descendants也是一个生成器,只是前两个每个成员都是直接子tag,而这个是每个子tag是一个成员外,每个孙tag也是 一个单成员,并且,标签里的内容也是一个单成员。
2、NavigableString对象进阶:
soup.string生成的对象可能会产生空格,而soup.stripped_strings 会自动去除空格和空行