📜  使用 WebScraping 和 Flask 为 GeeksforGeeks 用户数据设置 API(1)

📅  最后修改于: 2023-12-03 14:49:47.512000             🧑  作者: Mango

使用 WebScraping 和 Flask 为 GeeksforGeeks 用户数据设置 API

简介

在这个教程中,我们将使用 WebScraping 和 Flask 为 GeeksforGeeks 网站上的用户数据设置 API。我们将使用 Python 作为编程语言,并使用 Beautiful Soup 和 Requests 库进行 WebScraping。Flask 是一个方便的 Web 开发框架,可以轻松创建 Web 应用程序和 API。

目标

我们的目标是为 GeeksforGeeks 网站上的用户数据设置 API,以便用户可以通过 API 获取其他用户的详细信息。我们将使用以下 API 端点:

  • /users:获取所有用户的列表。
  • /users/{username}:获取特定用户的详细信息。
设置

首先,我们需要安装必要的库。我们将使用以下命令安装它们:

pip install flask requests beautifulsoup4
WebScraping

让我们从 GeeksforGeeks 网站中获取用户数据。为了获取所有用户的列表,我们将使用 https://auth.geeksforgeeks.org/user/list_all_users.php 这个 URL。我们将向此 URL 发送 GET 请求,该 URL 将返回包含所有用户 ID 的 HTML 页面。然后,我们将使用 Beautiful Soup 库解析 HTML 页面以获取所有用户的 ID 和用户名。

import requests
from bs4 import BeautifulSoup


def get_user_list():
    user_list_url = 'https://auth.geeksforgeeks.org/user/list_all_users.php'
    response = requests.get(user_list_url)
    soup = BeautifulSoup(response.text, 'html.parser')
    users = []
    for option in soup.find_all('option'):
        user_id = option['value']
        username = option.text.strip()
        if user_id and username:
            users.append({'id': user_id, 'username': username})
    return users

接下来,我们需要获取特定用户的详细信息。为此,我们将使用 https://auth.geeksforgeeks.org/user/profile.php?id=USER_ID 这个 URL。将 USER_ID 替换为要获取详细信息的用户的 ID。这个 URL 将返回包含用户详细信息的 HTML 页面。我们将使用 Beautiful Soup 库解析 HTML 页面以获取特定用户的详细信息。

def get_user_details(user_id):
    user_profile_url = f'https://auth.geeksforgeeks.org/user/profile.php?id={user_id}'
    response = requests.get(user_profile_url)
    soup = BeautifulSoup(response.text, 'html.parser')
    name = soup.find('input', {'name': 'realname'})['value']
    email = soup.find('input', {'name': 'email'})['value']
    country = soup.find('input', {'name': 'country'})['value']
    return {'id': user_id, 'name': name, 'email': email, 'country': country}
Flask

现在,我们将使用 Flask 构建 API。在构建 API 之前,我们需要导入所需的库和函数。

from flask import Flask, jsonify
from webscraping import get_user_list, get_user_details


app = Flask(__name__)

我们将使用 @app.route 来定义 API 端点。

@app.route('/users')
def users():
    users = get_user_list()
    return jsonify(users)

@app.route('/users/<user_id>')
def user(user_id):
    user_details = get_user_details(user_id)
    return jsonify(user_details)

在上面的代码中,/users/users/<user_id> 是 API 端点。usersuser 是函数名称。这意味着当用户发送 GET 请求到 /users 端点时,将调用 users 函数,并返回包含用户列表的 JSON 响应。同样,当用户发送 GET 请求到 /users/<user_id> 端点时,将调用 user 函数,并返回包含特定用户详细信息的 JSON 响应。其中,<user_id> 是动态参数,它将被实际的用户 ID 值替换。

在 Flask 应用程序中添加以下代码以启动服务器。

if __name__ == '__main__':
    app.run(debug=True, port=5000)

在上面的代码中,debug=True 可以启用调试模式,这对开发和测试非常有用。port=5000 可以指定 Flask 应用程序要监听的端口号。

现在,我们将启动 Flask 服务器并测试 API。

测试

首先,运行以下命令以启动 Flask 服务器。

python app.py

然后,使用 curl 命令测试 API。发送 GET 请求到 /users 端点以获取所有用户的列表。

curl -i http://localhost:5000/users

响应应该是这样的。

HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 542
Server: Werkzeug/1.0.1 Python/3.8.2
Date: Sun, 11 Oct 2020 08:17:01 GMT

[
  {
    "id": "702978", 
    "username": "abhi8569"
  }, 
  {
    "id": "766088", 
    "username": "samson_adjei"
  }, 
  ...
]

发送 GET 请求到 /users/702978 端点以获取特定用户的详细信息。

curl -i http://localhost:5000/users/702978

响应应该是这样的。

HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 96
Server: Werkzeug/1.0.1 Python/3.8.2
Date: Sun, 11 Oct 2020 08:18:23 GMT

{
  "id": "702978",
  "name": "Abhishek Ahmad", 
  "email": "abhi8569@yahoo.co.in", 
  "country": "India"
}

至此,我们已经成功为 GeeksforGeeks 网站上的用户数据设置了一个简单的 API。

结论

在本教程中,我们了解了如何使用 WebScraping 和 Flask 为 GeeksforGeeks 网站上的用户数据设置 API。我们已经构建了一个简单的 API,用于获取特定用户的详细信息。我们使用 Requests 库发送 GET 请求,并使用 Beautiful Soup 库解析 HTML 页面以获取用户数据。最后,我们使用 Flask 框架构建了一个简单的 Web 应用程序,以便我们可以使用 HTTP 请求发送和接收用户数据。