• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Python, SQL 게시판 블로그 무한 크롤링 질문

블로그 무한 크롤링 질문

6 글 보임 - 1 에서 6 까지 (총 6 중에서)
  • 글쓴이
  • #99708

    문정현
    참가자
    범위 = [1,31,61,91]
    f = open('apple.txt', 'w+')
    for i in 범위:
    --data = requests.get(f'https://s.search.naver.com/p/review/45/search.naver?where=view&api_type=11&start={i}&query=사과&nso=&nqx_theme=%7B%22theme%22%3A%7B%22main%22%3A%7B%22name%22%3A%22food_ingredient%22%7D%7D%7D&main_q=&mode=normal&q_material=&ac=1&aq=0&spq=0&st_coll=&topic_r_cat=&nx_search_query=&nx_and_query=&nx_sub_query=&prank=31&sm=tab_jum&ssc=tab.view.view&ngn_country=KR&lgl_rcode=03170131&fgn_region=&fgn_city=&lgl_lat=35.1561&lgl_long=128.1033&abt=&_callback=viewMoreContents')
    --soup = BeautifulSoup(data.text.replace('\\', '') , 'html.parser') 
    --글리스트 = soup.select('a.api_txt_lines')
    --for ii in 글리스트:
    ----if len(f.readlines()) > 100:
    ------break
    ----else :
    ------f.write(ii.text + '\n')
    f.close()
    
    안녕하세요. 위와 같이 코딩을 해서 apple.txt에 블로그 글 제목 120개까지 작성하는데는 성공했습니다. 그래서 100개까지만 딱 만들고 싶어서
    ----if len(f.readlines()) > 100:
    ------break
    ----else :
    ------f.write(ii.text + '\n')
    와 같이 코드를 짜 100개가 넘으면 그만 두게 하려고 했는데요. 그만두지 않고 120개 모두를 작성하더라구요.
    그래서 len(f.readlines())를 확인해보니깐 0으로 나오고, f.readlines()를 입력하면 반환되는 리스트에는 아무것도 없는 빈 리스트([])만 있었습니다.
    100개만 만들기 위해서는 어떻게 해야 하나요,,.? f.readlines()는 왜 빈 리스트로 나올까요>>?
    #99799

    codingapple
    키 마스터
    https://pynative.com/python-count-number-of-lines-in-file/ 
    for 반복문돌려서 줄갯수세어봅시다
    #99874

    문정현
    참가자
    알려주신대로 enumerate()랑 readlines() 사용해서 줄 갯수를 세어보려 했습니다. 근데 제가 원하는 건,
    for i in 범위:
    --data = requests.get(f'https://s.search.naver.com/p/review/45/search.naver?where=view&api_type=11&start={i}&query=사과&nso=&nqx_theme=%7B%22theme%22%3A%7B%22main%22%3A%7B%22name%22%3A%22food_ingredient%22%7D%7D%7D&main_q=&mode=normal&q_material=&ac=1&aq=0&spq=0&st_coll=&topic_r_cat=&nx_search_query=&nx_and_query=&nx_sub_query=&prank=31&sm=tab_jum&ssc=tab.view.view&ngn_country=KR&lgl_rcode=03170131&fgn_region=&fgn_city=&lgl_lat=35.1561&lgl_long=128.1033&abt=&_callback=viewMoreContents')
    --soup = BeautifulSoup(data.text.replace('\\', '') , 'html.parser') 
    --글리스트 = soup.select('a.api_txt_lines')
    --for ii in 글리스트:
    ----if len(f.readlines()) > 100:
    ------break
    ----else :
    ------f.write(ii.text + '\n')
    위 부분에서 'for ii in 글리스트' 이 반복문 안에 readlines()나 enumerate()를 넣어서 줄 갯수를 세고 싶은데, 저 안에 넣은채로 코드를 실행하면, 계속 줄 갯수가 0으로, 즉 readlines()의 경우엔 빈 리스트로 나오더라구요. 꼭 반복문 바깥에서 달아야 줄 갯수가 제대로 세어집니다.
    
    
    for i in 범위:
    --data = requests.get(f'https://s.search.naver.com/p/review/45/search.naver?where=view&api_type=11&start={i}&query=사과&nso=&nqx_theme=%7B%22theme%22%3A%7B%22main%22%3A%7B%22name%22%3A%22food_ingredient%22%7D%7D%7D&main_q=&mode=normal&q_material=&ac=1&aq=0&spq=0&st_coll=&topic_r_cat=&nx_search_query=&nx_and_query=&nx_sub_query=&prank=31&sm=tab_jum&ssc=tab.view.view&ngn_country=KR&lgl_rcode=03170131&fgn_region=&fgn_city=&lgl_lat=35.1561&lgl_long=128.1033&abt=&_callback=viewMoreContents')
    --soup = BeautifulSoup(data.text.replace('\\', '') , 'html.parser')
    --글리스트 = soup.select('a.api_txt_lines')
    --for ii in 글리스트:
    ----f.write('\n' + ii.text)
    --print(len(f.readlines()))
    위 경우처럼 가장 바깥 for 반복문 안에 넣어도 결과가 빈리스트( [] )로 나옵니다.
    txt 파일에는 제대로 제목들이 작성되는데 왜 결과가 0으로 나오는 것일까요??
    너무 알고싶습니다.........!!!!
    #99876

    문정현
    참가자
    범위 = [1,31,61,91]
    f = open('apple.txt', 'w+')
    for i in 범위:
    --data = requests.get(f'https://s.search.naver.com/p/review/45/search.naver?where=view&api_type=11&start={i}&query=사과&nso=&nqx_theme=%7B%22theme%22%3A%7B%22main%22%3A%7B%22name%22%3A%22food_ingredient%22%7D%7D%7D&main_q=&mode=normal&q_material=&ac=1&aq=0&spq=0&st_coll=&topic_r_cat=&nx_search_query=&nx_and_query=&nx_sub_query=&prank=31&sm=tab_jum&ssc=tab.view.view&ngn_country=KR&lgl_rcode=03170131&fgn_region=&fgn_city=&lgl_lat=35.1561&lgl_long=128.1033&abt=&_callback=viewMoreContents')
    --soup = BeautifulSoup(data.text.replace('\\', '') , 'html.parser')
    --글리스트 = soup.select('a.api_txt_lines')
    --for ii in 글리스트:
    ----f.write(ii.text + '\n')
    f = open('apple.txt', 'r+') 
    x = f.readlines()[0:100]
    fp = open('last.txt', 'w+')
    for i in x:
    --fp.write(i)
    fp.close()
    f.close()
    
    일단 이런식으로 새로운 파일에 기존 파일 내용 100개만 추려서 넣는 방식으로 완성은 했습니다. 하지만, 위에 올려드린 코드에서 간단하게 원래 파일에 100개만 딱 저장할 수 있는 방법이 있는 것 같아 답답한 마음에 질문드렸습니당..
    #99891

    codingapple
    키 마스터
    이미 파일을 한 번 읽어서 커서가 파일 맨 끝에 가있어서 그럴걸요 
    다시 위로 보내려면 파일.seek(0) 같은거 써야합니다
    #99894

    문정현
    참가자
    글리스트 = soup.select('a.api_txt_lines')
    --for ii in 글리스트:
    --f.write(ii.text)
    --f.seek(0)
    --if len(f.readlines()) < 100 :
    ----f.write('\n')
    --else :
    ----break
    
    요렇게 해서 해결했습니다 감사합니다!!
6 글 보임 - 1 에서 6 까지 (총 6 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠