066. 编写一个函数,实现简单的网络爬虫功能,抓取网页内容

在 Python 中,可以使用 requestsBeautifulSoup 库来实现一个简单的网络爬虫,用于抓取网页内容。requests 用于发送 HTTP 请求,而 BeautifulSoup 用于解析 HTML 内容并提取所需数据。

安装依赖库

在开始之前,请确保你已经安装了 requestsbeautifulsoup4 库。如果没有安装,可以通过以下命令安装:

pip install requests beautifulsoup4

示例代码

以下代码定义了一个函数 simple_web_scraper,用于抓取网页内容并提取特定信息。我们将以抓取一个网页的标题和段落为例。

import requests
from bs4 import BeautifulSoup

def simple_web_scraper(url):
    """
    简单的网络爬虫函数,用于抓取网页内容

    :param url: 要抓取的网页 URL
    :return: 网页的标题和段落内容
    """
    try:
        # 发送 HTTP 请求
        response = requests.get(url)
        response.raise_for_status()  # 检查请求是否成功

        # 解析 HTML 内容
        soup = BeautifulSoup(response.text, 'html.parser')

        # 提取网页标题
        title = soup.find('title').get_text()
        print(f"网页标题:{title}")

        # 提取所有段落内容
        paragraphs = soup.find_all('p')
        print("网页段落内容:")
        for p in paragraphs:
            print(p.get_text())

        return title, [p.get_text() for p in paragraphs]

    except requests.exceptions.RequestException as e:
        print(f"请求失败:{e}")
    except Exception as e:
        print(f"解析失败:{e}")

# 示例用法
if __name__ == "__main__":
    url = "https://example.com"  # 替换为你想要抓取的网页 URL
    title, paragraphs = simple_web_scraper(url)

代码说明

发送 HTTP 请求

  • 使用 requests.get() 发送 GET 请求到指定的 URL。

  • 使用 response.raise_for_status() 检查请求是否成功,如果请求失败会抛出异常。

解析 HTML 内容

  • 使用 BeautifulSoup 解析 HTML 内容。response.text 是网页的 HTML 内容。

  • 使用 soup.find()soup.find_all() 方法提取特定的 HTML 元素。

提取数据

  • 使用 soup.find('title').get_text() 提取网页的标题。

  • 使用 soup.find_all('p') 提取所有段落内容,并通过 p.get_text() 获取纯文本。

异常处理:使用 try-except 捕获可能的异常,例如网络请求失败、HTML 解析错误等。

示例输出

假设目标网页是 https://example.com,抓取结果可能如下:

网页标题:Example Domain
网页段落内容:
This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.
More information...

注意事项

遵守法律法规:在进行网络爬虫开发时,请确保遵守相关法律法规和网站的 robots.txt 文件规定。

设置请求头:有些网站会限制爬虫访问,可以通过设置请求头来模拟浏览器访问:

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
}
response = requests.get(url, headers=headers)

处理动态内容:如果网页内容是通过 JavaScript 动态加载的,requestsBeautifulSoup 可能无法直接获取到内容。这种情况下,可以使用 SeleniumPlaywright 等工具来处理动态内容。

分页爬取:如果需要爬取多页内容,可以通过分析 URL 参数或页面结构来实现分页爬取。

扩展功能

如果你需要更复杂的爬虫功能,可以考虑以下工具:

  • Selenium:用于处理动态网页内容。

  • Scrapy:一个功能强大的爬虫框架,支持大规模数据爬取和处理。

  • Playwright:一个现代的自动化工具,支持多种浏览器。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)