2016-12-01 5 views
0

다음은 현재 코드입니다. 내가 뭘 잘못하고 있는지 모르겠다. 어쩌면 나는 html에서 충분히 깊이 파고 있지 않고 Beautifulsoup에게 적절한 태그를 제공하지 않을 것인가? 지금은 코드가 공백으로 표시됩니다.Beautifulsoup4 및 Python 3을 사용하여 웹 스크랩하는 방법

from bs4 import BeautifulSoup 
from urllib.request import urlopen 
html = urlopen("https://www.youtube.com/watch?v=5_zrHZdhaBU") 
soup = BeautifulSoup(html,'html.parser') 
nameList = soup.findAll("div", {"id": "cp-2"}) 
for name in nameList: 
    print(name.get_text()) 

다음은 내가 검사 한 코드입니다.

<div id="cp-2" class="caption-line" data-time="7.54"><div class="caption-line-time">0:07</div><div class="caption-line-text">but it was untucked.</div></div> 

*** 편집

코드가 옆에있는 공유 버튼을 "더"를 클릭하여 확인할 수 있습니다 파이썬 나에게 다시 돌아 얻으려고 "하지만 untucked했다". 그런 다음 성적표를 클릭하면 거기에 모든 텍스트가 표시됩니다.

+0

합니다. 이 선은 무엇입니까? –

+0

아약스를 통해 동적으로로드되지 않았습니까? 오픈 페이지 소스, 정적 소스에는 이러한 요소가 없을 수 있습니다. –

+0

@Yevhen Kuzmovych youtube 페이지로 이동하면 공유 옆에 "more"버튼이 있습니다. 그것을 클릭 한 다음 성적표를 클릭하십시오. 줄 0:07입니다. –

답변

0

오 그래요, Ajax를 통해로드되었습니다. 페이지를 열고 Network 탭을 열고 시작 시간 (최신 요청부터) 순으로 요청을 정렬하고 Youtube에서 CC 버튼을 클릭하십시오.

api/timedtext 요청을 수신하면 응답은 XML입니다. 여기 성적 증명서의 전체 URL :

https://www.youtube.com/api/timedtext?signature=1A03D323CBD455E9993B7AC447CA64764FA6FE75.59F4BD2D45A32E89FBF54B418EE2F763283A1007&asr_langs=fr%2Cja%2Cnl%2Ces%2Cru%2Cko%2Cit%2Cde%2Cpt%2Cen&key=yttt1&caps=asr&v=5_zrHZdhaBU&hl=en_US&expire=1480702409&sparams=asr_langs%2Ccaps%2Cv%2Cexpire&lang=en&fmt=srv3

나는이 URL이 있지만, 생성하는 방법을 모른다. 복잡한 YouTube 스크립트 등을 필요로합니다.

편집 :This answer 나를 도왔습니다. 이러한 매개 변수의 대부분을 생략하고 바로 URL을 사용할 수 있습니다 일반적으로

https://www.youtube.com/api/timedtext?&v=5_zrHZdhaBU&lang=en 

또는이 : 나는 페이지와 HTML에서이 줄을 찾을 수 없습니다

https://www.youtube.com/api/timedtext?&v={video_id}&lang={language_code} 
+0

다른 URL로 이동하여 사본을 긁을 수 있다는 의미입니까? 페이지에서 직접 긁어 낼 수 없습니까? –

+0

@BHok 네, 다른 URL이 필요합니다. 예를 들어 [this regex] (https://regex101.com/r/RuGXmI/2)와 같이 이전 URL의'{video_id} '부분을 추출해야합니다.'v = (? P [a- zA-Z \ d _] +)'. 또는 url을 일부 라이브러리로 구문 분석하고'v' 매개 변수를 얻는 것은 지루한 작업입니다. 이 작업을 자동으로 수행해야하는 경우 새 작업에 투입하십시오. –

+0

@BHok이 답변으로 문제가 해결되면 [승인 된 것으로 표시] (http://stackoverflow.com/help/accepted-answer) (녹색 체크)를 고려하십시오. –

관련 문제