BeautyfulSoup/python3基本使用

简单开始

# 这个代码是不完整的,有些没有闭合标签
html = """



    
    迅影网,迅雷电影下载,最新电影下载,高清电影下载
    <link rel="icon" href="/static/favicon.ico">
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
</head>
<body>
<header>
<div class="header-box">
    <div class="container">
        <span class="header-help">欢迎来到迅影网,一起分享电影给我们带来的快乐。</span>
        <div class="pull-right">
            <a class="header-help" onclick="notice('快捷键 Ctrl+D 可以快速添加到收藏夹。')" href="javascript:;">Ctrl+D 加入收藏夹</a> -
            <a class="header-help" style="color:red;" href="http://www.xunyingwang.com/tools/savewebsite">保存到桌面
        </div>

"""
soup = bs4.BeautifulSoup(html, 'lxml')
# 格式化代码,其实也不是很好用,闭合不准确
print(soup.prettify())
print(soup.title.string)
print(soup.span.string)
</code></pre> 
 <p>输出:</p> 
 <pre><code class="text"><!DOCTYPE html>
<html lang="zh-CN">
 <head>
  <meta charset="utf-8"/>
  <title>
   迅影网,迅雷电影下载,最新电影下载,高清电影下载
   <link href="/static/favicon.ico" rel="icon"/>
   <link href="/static/bootstrap/css/bootstrap.min.css" rel="stylesheet"/>
  
 
 
  
欢迎来到迅影网,一起分享电影给我们带来的快乐。
None 欢迎来到迅影网,一起分享电影给我们带来的快乐。

标签选择器

选择元素

html = """



    
    迅影网,迅雷电影下载,最新电影下载,高清电影下载
    
    


欢迎来到迅影网,一起分享电影给我们带来的快乐。 """ soup = bs4.BeautifulSoup(html, 'lxml') print(type(soup.title)) print(soup.title) print(soup.head) print(soup.link)

输出:


迅影网,迅雷电影下载,最新电影下载,高清电影下载


迅影网,迅雷电影下载,最新电影下载,高清电影下载




当有相同的标签时,会选第一个

获取名称

html = """
    
"""
soup = bs4.BeautifulSoup(html, 'lxml')
print(soup.link.name)

输出:

link

获取属性

html = """
    
"""
soup = bs4.BeautifulSoup(html, 'lxml')
print(soup.link['rel'])
print(soup.link.attrs['rel'])

输出:

['stylesheet']
['stylesheet']

获取内容

html = """
在这
""" soup = bs4.BeautifulSoup(html, 'lxml') print(soup.div.string) html = """
在这
""" soup = bs4.BeautifulSoup(html, 'lxml') print(soup.div.string)

输出:

None
在这

一个换行就匹配不到了

嵌套选择

html = """
在这
""" soup = bs4.BeautifulSoup(html, 'lxml') print(soup.div.b.string)

输出:

在这

获取子节点

使用contents

html = """

"""
soup = bs4.BeautifulSoup(html, 'lxml')
print(soup.div.contents)

输出:

['\n', Ctrl+D 加入收藏夹, ' -\n            ', 保存到桌面, '\n']

每个标签和每个标签间的字符都是一个元素

使用children

html = """

"""
soup = bs4.BeautifulSoup(html, 'lxml')
print(soup.div.children)
for i,child in enumerate(soup.div.children):
    print(i, child)

输出:


0 

1 Ctrl+D 加入收藏夹
2  -
            
3 保存到桌面
4 

children返回的是一个迭代器
enumerate返回迭代索引和内容

使用返回子孙节点

html = """

"""
soup = bs4.BeautifulSoup(html, 'lxml')
print(soup.div.descendants)
for i,child in enumerate(soup.div.descendants):
    print(i, child)

输出:


0 

1 Ctrl+D 加入收藏夹
2 Ctrl+D 加入收藏夹
3  -
            
4 

保存到桌面


5 

6 
保存到桌面

7 

8 保存到桌面

9 保存到桌面
10 

11 

12 

13 

父节点

单个父节点

html = """





"""
soup = bs4.BeautifulSoup(html, 'lxml')
print(soup.div.parent)

输出:




祖父节点

html = """

    
        

I am

Here

""" soup = bs4.BeautifulSoup(html, 'lxml') print(soup.p.parents) for i, parent in enumerate(soup.p.parents): print(i, parent)

输出:


0 

I am

Here

1

I am

Here

2

I am

Here

3

I am

Here

兄弟节点

html = """

I am here?

Where are you now?

See you late

You are my sunshine

How much I love you

""" soup = bs4.BeautifulSoup(html, 'lxml') # 小兄弟节点 print(list(enumerate(soup.p.next_siblings))) # 大兄弟节点 print(list(enumerate(soup.p.previous_siblings)))

输出:

[(0, '\n'), (1, 

Where are you now?

), (2, '\n'), (3,

See you late

), (4, '\n'), (5,

You are my sunshine

), (6, '\n'), (7,

How much I love you

), (8, '\n')] [(0, '\n')]

标准选择器

find_all(name, attrs, recursive, text, **kwargs)

name标签名

html = """

I am here?

Where are you now?

See you late

You are my sunshine

How much I love you

""" soup = bs4.BeautifulSoup(html, 'lxml') print(soup.find_all('p')) print(type(soup.find_all('p'))) print(soup.find_all('p')[0]) print(type(soup.find_all('p')[0]))

输出:

[

I am here?

,

Where are you now?

,

See you late

,

You are my sunshine

,

How much I love you

]

I am here?

attrs属性

html = """
反贪风暴3 迅雷下载
黄金兄弟 迅雷下载
超人总动员2 迅雷下载
江湖儿女 迅雷下载
蚁人2:黄蜂女现身 迅雷下载
""" soup = bs4.BeautifulSoup(html, 'lxml') print(soup.find_all(attrs={'href': 'http://www.xunyingwang.com/movie/430296.html'})) print(soup.find_all(attrs={"class": 'carousel-caption'})) print(soup.find_all(class_='carousel-caption'))

输出:

[超人总动员2 迅雷下载]
[, , , , ]
[, , , , ]

text文本内容

html = """
反贪风暴3 迅雷下载
黄金兄弟 迅雷下载
超人总动员2 迅雷下载
江湖儿女 迅雷下载
蚁人2:黄蜂女现身 迅雷下载
超人总动员2 迅雷下载
""" soup = bs4.BeautifulSoup(html, 'lxml') print(soup.find_all(text='超人总动员2 迅雷下载'))

输出:

['超人总动员2 迅雷下载', '超人总动员2 迅雷下载']

find方法

html = """
反贪风暴3 迅雷下载
黄金兄弟 迅雷下载
超人总动员2 迅雷下载
江湖儿女 迅雷下载
蚁人2:黄蜂女现身 迅雷下载
超人总动员2 迅雷下载
""" soup = bs4.BeautifulSoup(html, 'lxml') print(soup.find(text='超人总动员2 迅雷下载'))

输出:

超人总动员2 迅雷下载

CSS选择器

html = """
反贪风暴3 迅雷下载
黄金兄弟 迅雷下载
超人总动员2 迅雷下载
江湖儿女 迅雷下载
蚁人2:黄蜂女现身 迅雷下载
超人总动员2 迅雷下载
""" soup = bs4.BeautifulSoup(html, 'lxml') print(soup.select(".item .carousel-caption")) print(soup.select(".item a img")) print(soup.select(".item div")[2].get_text()) print(soup.select(".item a img")[4]['alt'])

输出:

[, , , , , ]
[反贪风暴3 迅雷下载, 黄金兄弟 迅雷下载, 超人总动员2 迅雷下载, 江湖儿女 迅雷下载, 蚁人2:黄蜂女现身 迅雷下载, 超人总动员2 迅雷下载]
超人总动员2 迅雷下载
蚁人2:黄蜂女现身 迅雷下载

参考文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.html

你可能感兴趣的:(BeautyfulSoup/python3基本使用)