반응형
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를 사용했습니다. 혹시 사용 방법을 모르시겠다면 전에 포스팅한 게시물을 참고하시면 좋을 거 같습니다.
이런 식으로 값을 구한 다음 함수를 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>    
<a href="{% url 'rank' %}"><button type="submit" class="btn btn-dark mb-2">순위확인하기</button></a>
</div>
이렇게 값을 가져온 뒤 나타낼 수 있습니다.
결과 화면을 보자면
이런 식으로 크롤링을 사용할 수 있습니다.!
반응형
'Personal Project' 카테고리의 다른 글
연관검색어,해시태그 서비스 구현 [Django로 개발 git, Heroku로 배포] (2) | 2020.12.12 |
---|---|
[Linux] screen 사용법 (0) | 2020.10.23 |
django 글 줄바꿈 해주기 (1) | 2020.09.14 |
django Paginator 사용하기. 페이징 기법, 페이지 나누기 (0) | 2020.09.10 |
django static사용해서 css파일 관리, 적용시키기 (0) | 2020.09.07 |
댓글