2017-11-07 8 views
0

웹 페이지의 다음 페이지를 긁어 내려고합니다. 총 20 페이지입니다. 첫 페이지의 URL을 사용하여 다음 페이지를 긁어 내고 싶습니다.파이썬의 "다음 페이지"긁힘

코드 :

b=[] 
url="https://abcde.com/cate6-%E7%BE%8E%E5%A6%9D%E4%BF%9D%E9%A4%8A/" 
res=requests.get(url) 
soup = BeautifulSoup(res.text,"lxml") 
b.append(url) 
while True: 
    try: 
     dct = {"data-icon":"k"} 
     url=soup.find('',dct) 
     url=(url['href']) 
     print(url) 
    except TypeError: 
     break 
    if url: 
     url=("https://abcde.com"+url) 
     print(url) 
     b.append(url) 
print(b) 

다음 페이지의 HTML :

<li class="next"><a href="https://abcde.com/cate6-%E7%BE%8E%E5%A6%9D%E4%BF%9D%E9%A4%8A/?p=2" data-icon="k">next page</a></li> 

마지막 페이지의 HTML :

<li class="next disabled"><a href="" data-icon="k">next page</a></li> 

그것은 단지 첫 페이지의 URL을 출력합니다.

답변

0

예상되는 결과는 무엇입니까? 루프를 입력하기 전에 requests.get(url) 번만 호출하십시오. while 루프 안에 res=requests.get(url) 및 모든 후속 라인을 배치해야 코드가 실제로 후속 페이지를 가져올 수 있습니다. 예를 들면 다음과 같습니다 requests.get(url)는이 모든 반복에 실행되는 원인이 루프의 내부에 있기 때문에

# The following are used for debugging output in this example: 
#import sys 
#import traceback 

# ... Your other code... 

b=[] 
url="https://abcde.com/cate6-%E7%BE%8E%E5%A6%9D%E4%BF%9D%E9%A4%8A/" 
b.append(url) 
while True: 
    try: 
     res=requests.get(url) 
    except: 
     print("Failed while fetching " + str(url)) 
     print("Stack trace:") 
     traceback.print_exc() 
     break; 
    # end try 
    try: 
     soup = BeautifulSoup(res.text,"lxml") 
    except: 
     print("Failed setting up beautiful soup parser object.") 
     print("Response from request for '" + str(url) + "' was: \n\t" + str(res).replace("\n", "\n\t"), file=sys.stderr) # Avoids polluting STDOUT 
     traceback.print_exc() 
     break; 
    # end try 

    # The following line is not needed here because the new URL is added in the IF statement at the bottom of loop: 
    # b.append(url) 

    try: 
     dct = {"data-icon":"k"} 
     url=soup.find('',dct) 
     url=(url['href']) 
     print(url) 
    except TypeError: 
     print("Leaving loop after Parsing of URL from page failed.") 
     break 
    if url: 
     url=("https://abcde.com"+url) 
     print(url) 
     b.append(url) 
# end while True 

# Debug statement: 
print("Outside of loop.") 

# Print output 
print(b) 

이 새로운 URL 매번 페이지를 요청합니다.

+0

안녕하세요! 당신의 답변에 감사드립니다. 당신이 코드를 인쇄 : 페이지에서 URL 구문 분석 후 루프를 떠나는 데 실패했습니다. 루프 바깥 쪽. [ 'https://abcde.com/cate6-%E7%BE%8E%E5%A6%9D%E4%BF%9D%E9%A4%8A/']하지만 내 문제는 다음 페이지에서 url을 읽으십시오. 아마도 코드에서 "try"오류가 발생했을 것입니다. – Makiyo

+0

@Makiyo이 경우, print 문을 가진 예외 처리기에'traceback.print_exc()'를 삽입하는 것이 좋습니다. 아마도'lxml'은 find 명령을 실패하게 만드는 페이지를 파싱하기위한 부적절한 선택입니까? 나는 아름다운 수프를 몇 년 동안 사용하지 않았기 때문에 학사 특유의 것들에 대한 나의 기억은 흐릿합니다. – SpencerD