2016-12-12 5 views
0

저는 파이썬 3.5와 bs4를 사용하고 있습니다.BeautifulSoup (bs4)가 모든 태그를 찾지 못했습니다.

다음 코드는 지정된 웹 사이트에서 모든 테이블을 검색하지 않습니다. 페이지는 14 개의 테이블을 가지고 있지만 코드의 반환 값은 2입니다. 무슨 일이 일어나는지 전혀 알지 못합니다. 수동으로 HTML을 검사했는데 왜 작동하지 않는지 이유를 찾을 수 없습니다. 각 테이블에 특별한 것은없는 것 같습니다.

import bs4 
import requests 

link = "http://www.pro-football-reference.com/players/B/BradTo00.htm" 

htmlPage = requests.get(link) 
soup = bs4.BeautifulSoup(htmlPage.content, 'html.parser') 
all_tables = soup.findAll('table') 
print(len(all_tables)) 

무슨 일 이니?

편집 : 명확히해야합니다. 수프 변수를 검사하면, 예상했던 모든 테이블이 포함되어 있습니다. findAll 메소드로 스프에서 테이블을 추출 할 수없는 이유는 무엇입니까?

+0

테이블이 Ajax를 통해로드되는지 여부를 확인하십시오. – mushfiq

+0

이 페이지는 자바 스크립트를 사용하여 데이터를 표시하지만 아마 모든 데이터는 HTML이지만 주석 처리되어있을 수 있습니다. BS를 사용하여'comment' 태그를 찾거나 문자열 함수 (또는 정규 표현식)를 사용하여' '을 찾으려고 시도 할 수 있습니다. 아마도 BS와 함께이 문자열을 사용할 수 있습니다. – furas

답변

2

이 페이지는 javascript에 의해 렌더링되며, broswer에서 javascrip을 사용하지 않으면이 페이지 만 두 테이블 만 나타납니다. 이 상황에서 셀레늄을 사용하는 것이 좋습니다.

+0

나는 자바 스크립트와 아약스 요청이 모두로드 된 후에 HTML을 다시 얻었다고 생각했다. '스프'변수를 검사했을 때 모든 테이블이있었습니다. 아약스 요청을 한 후에 데이터를 검색한다는 것을 증명하지 않습니까? – wjrhee

+0

요청은 그렇게 할 수 없지만 셀레늄 등을 사용하면 모든 테이블을 포함하는 스프를 얻으면 javascrip에서 페이지를 렌더링 한 후 데이터를 얻는다는 것을 증명합니다. –

+0

나는 아직도 혼란 스럽습니다. 수프에있는 모든 테이블을보십시오. 그러나 어쨌든 셀레늄을 사용했습니다. 고맙습니다! – wjrhee