
使用NestJS和Prisma構建REST API:身份驗證
toapi 可以通過 pip 安裝:
pip install toapi
在 toapi 中,每個網頁資源都通過 Item 類定義,您只需聲明需要抓取的字段和其對應的 CSS 選擇器或 XPath。
from toapi import Item, TextField, AttrField
class News(Item): title = TextField(css_select="h1.title") link = AttrField(css_select="a.link", attr="href")
class Meta: source = "https://news.example.com" route = "/news/:id"
2.注冊數據模型一旦數據模型定義完成,需要將其注冊到 API 服務中,才能啟動并暴露接口。
from toapi import Api
api = Api()api.register(News)
調用 run 方法來啟動服務,toapi 會自動啟動一個 HTTP 服務器并監聽請求。
if __name__ == "__main__": api.run()
toapi 支持動態路由,您可以在 URL 中使用變量部分。通過 :param 聲明動態路由,例如從 URL 中提取參數。
class Product(Item): name = TextField(css_select="h1.product-name") price = TextField(css_select="span.price") class Meta: source = "https://example.com/product/:product_id" route = "/product/:product_id"
這樣,通過訪問 http://localhost:5000/product/123,API 會提取 URL 中的 product_id 并從網頁中抓取相應的數據。
toapi 支持自定義中間件來處理請求和響應。中間件可以用于日志記錄、請求修改、數據過濾等任務。
from toapi.middleware import Middleware
class CustomMiddleware(Middleware): def process_request(self, request): print(f"Request URL: {request.url}")
def process_response(self, request, response): print(f"Response: {response}") api.add_middleware(CustomMiddleware)
這樣,每次請求和響應都會經過 CustomMiddleware 中定義的邏輯。
toapi 內置了緩存機制,可以減少頻繁的數據抓取請求,提高效率。可以使用內存緩存或自定義緩存后端。
from toapi.cache import MemoryCache
api.cache = MemoryCache()
通過啟用緩存,toapi 會在首次抓取數據時緩存結果,之后相同的請求將直接返回緩存數據。
通過 toapi,我們可以將 GitHub 趨勢頁面轉換為一個 API 接口,動態抓取流行的項目和相關信息。
from toapi import Item, TextField, AttrField
class GitHubTrend(Item): name = TextField(css_select="h1.h3.lh-condensed") stars = TextField(css_select="span.d-inline-block.float-sm-right") link = AttrField(css_select="h1.h3.lh-condensed > a", attr="href")
class Meta: source = "https://github.com/trending" route = "/trending"
api = Api()api.register(GitHubTrend)
if __name__ == "__main__": api.run()
訪問 http://localhost:5000/trending 即可返回 GitHub 熱門項目的數據。
在新聞網站上,您可以使用 toapi 提取新聞標題、內容等信息,并提供 RESTful API 供其他應用使用。
class News(Item): title = TextField(css_select="h1.article-title") content = TextField(css_select="div.article-body") link = AttrField(css_select="a.read-more", attr="href")
class Meta: source = "https://news.example.com" route = "/news/:id"
此 API 接口將提供關于新聞的詳細信息,幫助構建新聞聚合平臺。
toapi 是一個非常簡潔、易用的工具,適用于快速爬取網頁并將數據轉換為 API 的場景。它以簡單的聲明式規則和 RESTful 接口為核心,適合初學者和需要快速開發的項目。如果需要更復雜的功能,可以結合 Selenium 或其他動態網頁處理工具使用。各位小伙伴,今天的 Python 學習之旅就到這里啦!
文章轉自微信公眾號@王老五說職場