본문 바로가기
Personal Project

django로 크롤링해서 적용하기 +BeautifulSoup사용

by applepick 2020. 9. 24.
반응형

github 아이디를 입력하면 커밋한 날은 얼마나 되는지, 1년 동안 총 며칠을 커밋을 했는지 간편하게 보고 싶어 만들게 되었습니다. 순위는 아직 구현 중입니다.!

저는 home이라는 url에서 텍스트 박스에 값을 result페이지로 보내서 크롤링한 값을 적용하려고 합니다.

여기가 home url입니다. 

 

home.html의 값을 넘겨받는 코드를 보자면

<form class="form-inline" method="POST" action="{%url 'result' %}">
    <div class="form-group mx-sm-3 mb-2">
        <label for="inputPassword2" class="sr-only">githubID</label>
        <input type="input" class="form-control" id="gitID" name="gitID" placeholder="github ID">
    </div>

이런 식으로 form을 통해 result 페이지로 텍스트박스의 값을 넘겨줍니다.

이제 views.py의 코드를 분석해보겠습니다.

@csrf_exempt #CSRF token missing or incorrect오류 해결
def result(request):
    if request.method == "POST":
        gitID = request.POST['gitID']
    url = 'https://github.com/'+gitID
    req = requests.get(url)
    html = req.text
    soup = BeautifulSoup(html, 'html.parser')
    commit = 0
    countArray =''
    for i in range(1,10):
        countArray = 'rect[class="day"][data-count=\"'+ str(i)+'\"]'
        for tag in soup.select(countArray):
            commit+=1
    gitcommit = "1일 1커밋한 날은 총 "+str(commit)+"일입니다."
    day = round(commit/365*100,1)
return render(request,'result.html',{'gitcommit':gitcommit,'day':day,'gitID':gitID})

이런식으로 파이썬에서 크롤링하는 방식을 그대로 가져와서 django에 적용시킬 수 있습니다. home.html에서 gitID값을 가져온 뒤, url뒤에 넣어줍니다. BeautifulSoup를 사용했습니다. 혹시 사용 방법을 모르시겠다면 전에 포스팅한 게시물을 참고하시면 좋을 거 같습니다.

 

applepick.tistory.com/28

 

파이썬으로 웹크롤링 하기 (VScode, pip ,BeautifulSoup,requests) +하면서 import,from 오류났던거 정리

웹크롤링을 한번 공부해볼려고합니다. 저의 개발환경은 윈도우와 vscode를 이용하겠습니다. vscode를 실행시킵니다. 그러고나서 가상환경을 켜줍니다. py -m venv myvenv 저는 myvenv라는 가상환경을 만��

applepick.tistory.com

이런 식으로 값을 구한 다음 함수를 result.html에 넘겨줍니다.

이제 result.html부분을 볼까요?

<div id="div1" align="center">
    <h1>{{gitID}}님!</h1><br>
    <h1>{{gitcommit}}</h1><br>
    <h1>코딩에 투자한 날은 365일 중 {{day}}%이네요.</h1><br><br>
    <a href="{% url 'home' %}"><button type="submit" class="btn btn-dark mb-2">돌아가기</button></a>&nbsp&nbsp&nbsp&nbsp
    <a href="{% url 'rank' %}"><button type="submit" class="btn btn-dark mb-2">순위확인하기</button></a>
</div>

이렇게 값을 가져온 뒤 나타낼 수 있습니다.

결과 화면을 보자면

이런 식으로 크롤링을 사용할 수 있습니다.!

반응형

댓글