2017-04-21 8 views
0

html을 크롤링하기 위해 거미를 작성하고 싶습니다. 나는 requestsbeautifulsoup을 사용하지만, 나는 단지 beautifulsoup가 전체 페이지를 분석 할 수 없다는 것을 알아 냈습니다. 대신, Beautifulsoup는 단지 그것의 절반만을 파싱합니다. 다음은 내 코드입니다 :Beaultifusoup가 모든 html을 구문 분석 할 수 없습니다.

import requests 
from bs4 import BeautifulSoup as bs 
urls = ['http://www.bishefuwu.com/developer/transmit','http://www.bishefuwu.com/developer/transmit/index/p/2.html'] 
html = requests.get(urls[0]).content 
soup = bs(html,'lxml') 
table = soup.find('tbody') 
trs = table.find_all('tr') 
for tr in trs: 
    r = tr.find_all('td')[:3] 
    for i in map(lambda x:x.get_text(),r): 
     print i 

이는 "13107"은 하지만 내 거미는 단지 그것의 절반을 가지고, 내 행은 "13192"에서 정지 행이 the origin page이다. 테스트를 위해, 나는 수동으로 requests에 의해 요청 된 원산지 HTML을 저장하고 나는 모든 것이 잘된다는 것을 발견했다. 이 오류는 Beautifulsoup에 있습니다. 어떻게 해결할 수 있습니까? 감사합니다.

답변

1

아니요, 여기 BeautifulSoup에는 아무런 문제가 없습니다. http://www.bishefuwu.com/developer/transmit URL 아래에 단일 페이지를 파싱하는 중입니다. 두 번째 페이지에는 숫자 13107이 포함 된 행이 없습니다. 당신은 또한하지 사전에 URL 목록을 하드 코딩하는 생각과의 페이지 매김 블록을 구문 분석보다 동적 인 방식으로 페이지 매김을 처리 할 수 ​​있음을

with requests.Session() as session: 
    for url in urls: 
     html = session.get(url).content 

     soup = bs(html, 'lxml') 

     for tr in soup.select("tbody tr"): 
      r = tr.find_all('td')[:3] 
      for i in map(lambda x: x.get_text(), r): 
       print(i) 

참고 : 목록에있는 모든 URL을 통해

으로 반복 사용 가능한 페이지 번호를 추출하십시오.

+0

많이 감사합니다! – ucag