专业的编程技术博客社区

网站首页 > 博客文章 正文

BeautifulSoup网页解析 人家觉得爬取数据好轻松呀

baijin 2024-12-18 14:40:48 博客文章 7 ℃ 0 评论

BeautifulSoup网页解析 人家觉得爬取数据好轻松呀

亲爱的小伙伴们~今天来跟大家分享一个超级实用的Python库:BeautifulSoup!作为一个可爱的爬虫工程师,人家发现很多初学者都会被网页解析搞得晕头转向。不过别担心呀,有了BeautifulSoup,解析网页数据就像喝着奶茶一样轻松惬意呢!今天就让我带大家一起来玩转这个强大的工具吧!(????)

安装BeautifulSoup

首先要安装这个小可爱,只需要在命令行输入以下命令就好啦:


pip install beautifulsoup4

pip install lxml

初识BeautifulSoup

BeautifulSoup就像是一个温柔的小助手,能帮我们把杂乱的HTML代码整理得井井有条。来看看基本用法吧:


from bs4 import BeautifulSoup



# 创建一个简单的HTML字符串

html_doc = """

<html>

    <head><title>我的第一个网页</title></head>

    <body>

        <h1>欢迎来到我的博客</h1>

        <div class="content">

            <p>这是第一段文字</p>

            <p>这是第二段文字</p>

        </div>

    </body>

</html>

"""



# 创建BeautifulSoup对象

soup = BeautifulSoup(html_doc, 'lxml')

print(soup.title.text)  # 输出:我的第一个网页

小贴士:使用'lxml'作为解析器会比默认的解析器更快哦~

查找元素的方法

BeautifulSoup提供了好多种可爱的查找方法,就像在游乐园里寻找自己喜欢的项目一样简单:


# 1. find方法:找到第一个符合条件的元素

first_p = soup.find('p')

print(first_p.text)  # 输出:这是第一段文字



# 2. find_all方法:找到所有符合条件的元素

all_p = soup.find_all('p')

for p in all_p:

    print(p.text)



# 3. 使用CSS选择器

content = soup.select('.content')  # 查找class为content的元素

实战小案例:爬取一个简单的网页

让我们来做一个小实战,假设要爬取一个包含美食菜单的网页:


import requests

from bs4 import BeautifulSoup



def get_food_menu():

    # 这里用一个示例HTML

    html = """

    <div class="menu">

        <div class="food-item">

            <h3>糖醋里脊</h3>

            <p class="price">¥38</p>

        </div>

        <div class="food-item">

            <h3>宫保鸡丁</h3>

            <p class="price">¥32</p>

        </div>

    </div>

    """

    

    soup = BeautifulSoup(html, 'lxml')

    food_items = soup.find_all('div', class_='food-item')

    

    menu_list = []

    for item in food_items:

        name = item.h3.text

        price = item.find('p', class_='price').text

        menu_list.append(f"{name}: {price}")

    

    return menu_list



# 测试一下

menu = get_food_menu()

for item in menu:

    print(item)

小贴士和注意事项

  1. 记得要先检查网站的robots.txt,遵守爬虫规则哦~
  2. 在使用findfind_all时,可以通过attrs参数指定多个属性进行筛选。
  3. 如果网页编码有问题,可以用soup = BeautifulSoup(html, 'lxml', from_encoding='utf-8')指定编码。

练习小作业

试试看能不能完成下面这个小任务呢:

  1. 创建一个包含多个<a>标签的HTML字符串
  2. 使用BeautifulSoup提取所有链接的文本和href属性
  3. 将结果保存在一个字典中

小伙伴们,今天的Python学习之旅就到这里啦!记得动手敲代码,有问题随时在评论区问我哦。祝大家学习愉快,Python学习节节高!(?????)

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表