066. 编写一个函数,实现简单的网络爬虫功能,抓取网页内容
在 Python 中,可以使用 requests
和 BeautifulSoup
库来实现一个简单的网络爬虫,用于抓取网页内容。requests
用于发送 HTTP 请求,而 BeautifulSoup
用于解析 HTML 内容并提取所需数据。
安装依赖库
在开始之前,请确保你已经安装了 requests
和 beautifulsoup4
库。如果没有安装,可以通过以下命令安装:
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 动态加载的,requests
和 BeautifulSoup
可能无法直接获取到内容。这种情况下,可以使用 Selenium
或 Playwright
等工具来处理动态内容。
分页爬取:如果需要爬取多页内容,可以通过分析 URL 参数或页面结构来实现分页爬取。
扩展功能
如果你需要更复杂的爬虫功能,可以考虑以下工具:
-
Selenium:用于处理动态网页内容。
-
Scrapy:一个功能强大的爬虫框架,支持大规模数据爬取和处理。
-
Playwright:一个现代的自动化工具,支持多种浏览器。
视频讲解
BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)