Python을 사용하여 음성으로 웹 스크레이퍼 구축

특히 음성 인식 API를 사용하는 음성 명령은 흥미롭습니다. Deepgram의 실시간 전사와 음성을 텍스트로 변환하는 Python SDK에 노출된 후, 내 목소리로 웹사이트를 스크랩하면 좋겠다고 생각했습니다.

프로젝트 작동 방식은 간단합니다.
  • 내 컴퓨터의 마이크에 "scrape"명령을 말하십시오.
  • 이렇게 하면 웹 페이지에서 링크를 추출하는 Python 스크레이퍼가 시작됩니다.

  • Python, FastAPI 및 Deepgram 음성 텍스트 변환을 사용하여 이 프로젝트를 구축한 방법을 자세히 살펴보겠습니다.

    Speech-to-Text와 함께 음성 명령을 사용하는 Python 코드 웹 스크레이퍼



    이 음성 명령 스크레이퍼에는 Python의 최신 웹 프레임워크 중 하나인 FastAPI를 사용했습니다. get up and running with FastAPI and Deepgram’s live transcription using the Python SDK 방법에 대한 블로그 게시물을 이미 작성했습니다.

    Deepgram의 블로그에 FastAPI에 대한 자습서가 이미 작성되어 있으므로 내original post가 대부분의 Python 코드를 다루므로 자세한 내용은 다루지 않겠습니다.

    설치부터 시작하겠습니다.

    가상 환경 내 터미널에서 두 개의 추가 Python 라이브러리를 설치했습니다.

    pip install beautifulsoup4 
    pip install requests
    


    그런 다음 import 문을 main.py 파일에 추가했습니다.

    from bs4 import BeautifulSoup
    import requests
    import re
    

    BeautifuSoup는 웹 스크래핑용입니다.requests 라이브러리는 페이지 소스에서 텍스트를 가져오는 것입니다.re 가져오기는 특정 형식으로 링크를 가져오는 것입니다.

    이 파일의 유일한 새 기능은 scrape_links 입니다. 또한 웹 페이지에서 추출된 모든 링크를 보유할 hold_links라는 새 목록을 정의했습니다. requests.get에 스크랩할 URL을 전달하고 BeautifulSoup 개체를 반복합니다. 루프를 통과할 때마다 웹 페이지의 링크가 목록에 추가됩니다.

    hold_links = []
    
    def scrape_links():
       url = "https://xkcd.com/"
       r = requests.get(url)
    
       soup = BeautifulSoup(r.text, "html.parser")
    
       for link in soup.find_all("a", attrs={'href': re.compile("^https://")}):
           hold_links.append(link.get('href'))
    
       return hold_links
    


    다음은 get_transcript 내부 함수입니다.

    ​​async def process_audio(fast_socket: WebSocket):
       async def get_transcript(data: Dict) -> None:
           if 'channel' in data:
               transcript = data['channel']['alternatives'][0]['transcript']
    
               if transcript and transcript == 'scrape':
                   scrape_links()
                   await fast_socket.send_text(transcript)
    
       deepgram_socket = await connect_to_deepgram(get_transcript)
    
       return deepgram_socket
    


    여기서 유일한 변경 사항은 스크립트가 있는지 확인하고 스크립트 또는 음성 명령이 "scrape"인지 확인한 다음 scrape_links 함수를 호출하는 다음 행입니다.

    if transcript and transcript == 'scrape':
                   scrape_links()
    


    마지막으로 템플릿을 렌더링할 때 HTML 페이지가 Jinja를 사용하여 링크를 표시할 수 있도록 컨텍스트 개체로 hold_links 목록을 전달했습니다.

    @app.get("/", response_class=HTMLResponse)
    def get(request: Request):
       return templates.TemplateResponse("index.html", {"request": request, "hold_links": hold_links})
    


    index.html 파일에서 <head></head> 섹션에 다음 줄을 추가하여 5초마다 페이지를 새로 고칩니다.

    <meta http-equiv="refresh" content="5" />
    


    추출된 링크를 표시하려면 "scrape"음성 명령을 말한 후 페이지를 새로고침해야 합니다.

    마지막으로 <body></body> 에서 웹 페이지에서 추출된 링크를 반복하고 HTML 페이지로 렌더링하는 다음 줄을 추가합니다index.html.

    <body>
           <p>
               {% for link in hold_links %}
                   {{ link }}</br>
               {% endfor %}
           </p>
    </body>
    


    마지막으로 FastAPI Python 음성-텍스트 웹 스크레이퍼를 실행하려면 터미널에서 uvicorn main:app --reload를 입력하고 http://127.0.0.1:8000/로 이동합니다.

    내 컴퓨터의 마이크에 "scrape"라는 단어를 말하면 지정된 URL에 대한 추출된 링크 목록이 웹 페이지에 나타납니다.





    내 프로젝트가 흥미로웠거나 질문이 있으면 언제든지 ! 기꺼이 도와드리겠습니다!

    좋은 웹페이지 즐겨찾기