API를 통해 스크랩한 데이터 제공— FastAPI

우리 프로젝트에서 우리는 파이썬의 requests-html 라이브러리를 사용하여 웹사이트(thehackernews.com)를 스크랩하여 모든 카테고리의 모든 최신 기사를 가져왔습니다. 프로젝트는 단순히 모든 기사의 제목과 링크를 터미널에 인쇄하는 것이었습니다.

이 프로젝트에서는 Python의 FastAPI 프레임워크를 사용하여 API를 통해 스크랩한 데이터를 제공합니다. 또한 데이터를 쉽게 제공하고 스크래핑을 활성화할 수 있도록 스크래핑이 수행되는 방식에 약간의 조정을 할 것입니다.

이제 THN_scraper 프로젝트를 시스템에 복제하여 시작하겠습니다.
git clone https://github.com/VishnuDileesh/THN_scraper
폴더로 이동한 후 패키지를 설치할 가상 환경을 생성해 보겠습니다.
python3 -m venv envsource env/bin/activate
환경을 활성화한 후 requirements.txt에서 필요한 패키지를 설치하겠습니다.
pip3 install -r requirements.txt
이제 터미널에서 다음 명령을 호출하여 프로젝트를 실행해 보겠습니다.
python3 main.py


프로젝트를 실행하면 터미널에 위의 출력이 표시됩니다. 이제 기본 프로젝트를 설정하는 데 모두 능숙하다는 의미입니다. 이제 API를 통해 데이터를 제공하는 작업을 시작하겠습니다.

main.py 파일의 이름을 scraper.py로 바꾸는 것으로 시작하겠습니다.

이름 변경이 완료되면 scraper.py 파일에서 약간의 조정이 필요합니다.

def scrapeData():

    datas = []

    for category in categories:

        category = CategoryScrape(f'{baseURL}{category}', category)

        category.scrapeArticle()


def getScrapedData():

    return datas

여기에서 우리는 scrapeData라는 함수에 scrape 루프를 배치하여 API 엔드포인트에서 함수를 호출하여 데이터를 실제로 스크래핑할 수 있습니다. 또한 API 엔드포인트에서 스크랩된 데이터를 수신하여 제공하기 위해 getScrapedData라는 또 다른 함수를 생성하고 있습니다.

이제 우리의 모든 작업은 여기 scraper.py 파일에서 완료됩니다. 모든 API 코드를 저장할 main.py라는 새 파일을 만들어 계속 진행하겠습니다.

프로젝트에 FastAPI와 uvicorn을 설치하는 것을 잊지 마십시오.
pip3 install fastapi uvicorn
이제 모든 것을 설치했으면 새로 설치된 패키지를 반영하도록 requirements.txt 파일도 업데이트하겠습니다.
pip3 freeze > requirements.txt
from fastapi import FastAPI, BackgroundTasks
from scraper import scrapeData, getScrapedData

app = FastAPI()


@app.get("/")
async def index():
    """ index route """

    return {
        "get-data": "visit /get-data to get scraped data",
        "scrape-data": "visit /scrape-data to activate scraping"
    }

main.py에서 먼저 설치된 fastapi 프레임워크에서 FastAPI 및 BackgroundTasks를 가져옵니다. 그런 다음 scraper.py 파일에서 함수 scrapeData 및 getScrapedData를 가져와야 합니다.

그런 다음 import FastAPI()를 초기화하여 앱 객체를 생성하고 첫 번째 경로를 생성하여 시작합니다. 이 경로는 매우 간단한 JSON 응답을 반환합니다.

@app.get("/get-data")
async def get_data():
    """ Get all scraped data as in json by visiting /get-data """
    return getScrapedData()


@app.get("/scrape-data")
async def scrape_data(background_tasks: BackgroundTasks):
    """ On doing a get request to '/scrape-data' you Activates scraping """

    background_tasks.add_task(scrapeData)

    return {"Status": "Activated Scraping"}

get-data 경로에서 우리는 scraper.py 파일에서 가져온 getScrapedData 함수를 호출합니다. 경로는 웹사이트(thehackernews.com)에서 스크랩한 모든 데이터를 반환합니다.

scrape-data 경로에서 우리는 scraper.py에서 background_tasks로 가져온 scrapeData 함수를 전달합니다. 그 대가로 우리의 scrapeData 기능을 활성화하여 스크립트를 실행하고 모든 스크래핑 마법을 수행하여 최신 해킹 뉴스 기사를 얻습니다.

이제 웹 서버에서 API를 제공할 준비가 되었습니다. 우리는 uvicorn을 웹 ​​서버로 사용할 것입니다. webserver 구성을 포함할 run.py라는 새 파일을 만들어 보겠습니다.


import uvicorn

if __name__ == "__main__":

    uvicorn.run("main:app",
                host='0.0.0.0',
                port=8000,
                reload=False,
                debug=False,
                workers=25)

여기 run.py 파일에서 설치된 유니콘을 가져오고 있습니다. 그런 다음 uvicorn.run 함수를 호출하여 파일을 초기화합니다. 여기에서 앱(main.py 파일에서 초기화함)을 전달하고 uvicorn이 제공할 호스트와 포트를 지정합니다. 그리고 reload와 debug는 개발 설정이므로 false로 설정하고 있습니다. workers 매개 변수를 사용하여 서버에서 처리할 작업자 수를 설정할 수 있습니다.

이것이 프로젝트에 필요한 모든 코드입니다. 이제 터미널에서 명령을 실행하여 프로젝트를 실행할 수 있습니다.
python3 run.py


프로젝트 GitHub 리포지토리에 대한 링크:


비슈누딜리쉬 / THN_scraper_api


웹사이트(thehackernews.com)에서 모든 카테고리의 최신 기사를 스크랩하고 나열하는 웹 API





즐거운 코딩, 계속 코딩하세요

좋은 웹페이지 즐겨찾기