Python BeautifulSoup网页分析技巧

2023-04-17 00:00:00 分析 网页 技巧
  1. 根据标签名获取元素

使用 BeautifulSoup 的标签选择器可以很方便地按照标签名获取元素。

from bs4 import BeautifulSoup

html_doc = """
<html>
<head>
    <title>pidancode.com</title>
</head>
<body>
    <h1>皮蛋编程</h1>
    <p>Python 网页分析技巧</p>
</body>
</html>
"""

soup = BeautifulSoup(html_doc, 'html.parser')

title_tag = soup.title
h1_tag = soup.h1

print(title_tag.string)  # pidancode.com
print(h1_tag.string)  # 皮蛋编程
  1. 根据类名获取元素

使用 BeautifulSoup 的 class 属性选择器可以很方便地按照类名获取元素。

from bs4 import BeautifulSoup

html_doc = """
<html>
<head>
    <title>pidancode.com</title>
</head>
<body>
    <h1 class="title">皮蛋编程</h1>
    <p class="content">Python 网页分析技巧</p>
</body>
</html>
"""

soup = BeautifulSoup(html_doc, 'html.parser')

title_tag = soup.select_one('.title')
content_tag = soup.select_one('.content')

print(title_tag.string)  # 皮蛋编程
print(content_tag.string)  # Python 网页分析技巧
  1. 根据属性获取元素

使用 BeautifulSoup 的属性选择器可以很方便地按照属性获取元素。

from bs4 import BeautifulSoup

html_doc = """
<html>
<head>
    <title>pidancode.com</title>
</head>
<body>
    <a href="http://pidancode.com">pidancode.com</a>
    <a href="http://github.com/pidancode">GitHub</a>
    <a href="http://weibo.com/pidancode">微博</a>
</body>
</html>
"""

soup = BeautifulSoup(html_doc, 'html.parser')

a_tags = soup.select('a')

for a_tag in a_tags:
    print(a_tag.string, a_tag['href'])

输出结果为:

pidancode.com http://pidancode.com
GitHub http://github.com/pidancode
微博 http://weibo.com/pidancode
  1. 获取子元素和父元素

使用 BeautifulSoup 的 .contents 和 .parent 属性可以很方便地获取子元素和父元素。

from bs4 import BeautifulSoup

html_doc = """
<html>
<head>
    <title>pidancode.com</title>
</head>
<body>
    <h1 class="title">皮蛋编程</h1>
    <p class="content">Python 网页分析技巧</p>
    <ul class="links">
        <li><a href="http://pidancode.com">pidancode.com</a></li>
        <li><a href="http://github.com/pidancode">GitHub</a></li>
        <li><a href="http://weibo.com/pidancode">微博</a></li>
    </ul>
</body>
</html>
"""

soup = BeautifulSoup(html_doc, 'html.parser')

ul_tag = soup.ul
li_tags = ul_tag.contents

print(ul_tag.parent.name)  # body

for li_tag in li_tags:
    print(li_tag.a.string, li_tag.a['href'])

输出结果为:

body
pidancode.com http://pidancode.com
GitHub http://github.com/pidancode
微博 http://weibo.com/pidancode
  1. 使用正则表达式匹配元素

使用 BeautifulSoup 的正则表达式匹配可以很方便地按照一定模式匹配元素。

from bs4 import BeautifulSoup
import re

html_doc = """
<html>
<head>
    <title>pidancode.com</title>
</head>
<body>
    <h1 class="title">皮蛋编程</h1>
    <p class="content">Python 网页分析技巧</p>
    <ul class="links">
        <li><a href="http://pidancode.com">pidancode.com</a></li>
        <li><a href="http://github.com/pidancode">GitHub</a></li>
        <li><a href="http://weibo.com/pidancode">微博</a></li>
    </ul>
</body>
</html>
"""

soup = BeautifulSoup(html_doc, 'html.parser')

a_tags = soup.find_all(href=re.compile('pidancode'))

for a_tag in a_tags:
    print(a_tag.string, a_tag['href'])

输出结果为:

pidancode.com http://pidancode.com
微博 http://weibo.com/pidancode

相关文章