python web crawler 질문입니다.
조회수 1219회
안녕하세요, 제가 아래의 웹페이지에서 각 장마다 절의 숫자를 얻을 수 있는 프로그램을 만들려고 합니다.
url = http://www.holybible.or.kr/B_NIV/cgi/bibleftxt.php?VR=NIV&VL=1&CN=1&CV=99
질문은 두가지입니다.
1) 각 장은, pagination이 되어있고 위의 url에서 VL의 숫자는 전체 책 66권의 숫자구요, CN은 각 책의 장의 숫자입니다. 예컨데, VL=20&CN=15 라면, 20번째 책의 15번째 장을 말하는 url이 되겠습니다. 하지만, 각 책은 장의 수가 다르고 만약 50장까지만 있는 책이라 하더라도 컨텐츠가 없는 51장 52장 53장의 url도 존재하는 것 같아서 고민입니다. ----------- word frequency 를 찾는 프로그램에서는 font class tkl 을 찾지 못하면 VL에 1을 더한다고 해놨는데, 이경우엔 어떻게 해결 해야 할지 모르겠습니다.
2) 절의 갯수 역시 각 장마다 달라서 이를 어떻게 추출 할 수 있을지요?? 각 책마다 전체 절수는 각 장의 절수를 다 더하면 되겠지만... 감이 안잡히네요 ㅎㅎ
도움 주시면 감사하겠습니다.
장 수를 세는 코드는 이렇게 짰었는데, 혹시 참고가 될까 첨부합니다. 감사합니다.
import requests
import re
def chapter_counter(max_book):
min_book = 1
while min_book <= max_book:
page = requests.get("http://www.holybible.or.kr/B_NIV/cgi/bibleftxt.php?VR=NIV&VL={}&CN=1&CV=99".format(min_book))
contents = str(page.content)
chapter = max(int(i) for i in re.findall(r'>(\d+)</[ab]> ', contents))
w = re.search(r'(?<=height=12>\s<b>)(\d+\s)?[a-zA-Z]+', contents).group()
print(w, '-', chapter, 'chapters')
min_book += 1
chapter_counter(10)
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
requests, beautifulsoup, html5lib 3가지 모듈이 필요합니다.
import requests import bs4 def main(): html = requests.get('http://www.holybible.or.kr/B_NIV/cgi/bibleftxt.php?VR=NIV&VL=40&CN=8&CV=99').content bs = bs4.BeautifulSoup(html, 'html5lib') pageTD = bs.findAll('td', attrs={'align':'center', 'class':'tk3'})[0] # 페이징 문단 lastChapter = pageTD.findChildren('a')[-2].text # 페이징 문단내 뒤에서 2번째 링크가 마지막 장이다. ol = bs.findAll('ol') # 문단 ''' ol 태그의 start 속성이 문단의 시작 값 ex) 1 6 11 16 ... 마지막 ol태그의 start 속성값과 ol 태그내 li(절) 갯수을 합하고 1을 빼준다. ''' sectionCnt = int(ol[-1].attrs['start']) + len(ol[-1].findAll('li')) - 1 print('해당성경의 마지막장: {0}\n해당장의 절수: {1}'.format(lastChapter, sectionCnt)) if __name__ == '__main__': main()
댓글 입력