2012-08-03 1 views
4

나는 Python3으로, 자바 스크립트를 사용하여 웹 스크래핑 웹 페이지에 근접 입력하는 시점에왔다. 나는 내 장화가 죽은 목마와 접촉하고 있음을 잘 알고 있지만, 어쨌든 나는 6 발을 쏘는 것처럼 느껴진다. 서양 스파게티입니다. 내 회색 모자 야?파이썬 3, 웹 스크래핑, 자바 스크립트 [마이 아]

:: 뒷이야기 : 나는 파이썬 3.2.3 사용하고

.

나는 YTD, 1-yr, 3-yr, 5-yr 10-yr 및/또는 사용자 정의 재고에 대한 유사한 기간에 대한 과거 재고 // etf // mutual_fund 가격 데이터 수집에 관심이 있습니다. , etf 또는 뮤추얼 펀드. Morningstar.com 사이트는 로그인을하지 않아도 가능한 한 많은 데이터를 제공하기 때문에 사이트를 설정했습니다. finance.google.com &과 같은 다른 사람들은 주식에 대해 제공하는 데이터와 etfs 및 뮤추얼 펀드에 대해 어떤 데이터가 일치하지 않는 경향이 있습니다.

이 기록 데이터에 대한 모닝를 사용하거나 그들이 부르는 "총 수익률을 후행"의 트레이드 오프는,이 데이터를 생성하는 그들이 자바 스크립트를 사용하는 것입니다. 여기

는 모닝에서 몇 가지 예제 링크입니다 :

A Mutual Fund;

An ETF;

A Stock.

나는의 숫자의 "반환을 후행"부분, 상단 행의 정도 관심 자바 스크립트 제작 차트.

:: 지금까지 시도 ::

내가 wget을 자바 스크립트로 재생되지 않는 것을 확인했습니다; 심지어 관련 모든 파일을 다운로드 [CSS,은 .js, & C] 로컬 브라우저 또는 스크립트에서 자바 스크립트 렌더링에 저를 허용하지 않았다. StackOverflow에 대한 연구 결과 확인되었습니다. 기꺼이 여기에서 바로 잡을 수 있습니다.

내 연구는 기계화가 Python3 존재하지 않는다는 것을 저를 알렸다. 나는 어쨌든 시도하고 경찰관으로 변했습니다. Javert는 "나는 그것을 알고있었습니다!"라고 외쳤습니다. "모듈이 존재하지 않습니다"라는 오류 메시지가 나타납니다. > 셀레늄 -

는 :: 나는 중 ... ::

들었습니다. 그러나, 내 이해는 이것이 당신의 즐겨 찾기 브라우저가 실제로 웹 페이지를 열고 주위를 탐색 한 다음 닫지 않을 것을 요구한다는 것입니다. 왜냐하면 Selenium에 대한 "이 탭/창 닫기"명령이 없기 때문입니다. 내가 // my_user가 많은 etfs, 주식 및/또는 뮤추얼 펀드의 과거 데이터를 얻고 싶다면 어떻게해야합니까? 그것은 많은 탭들입니다. // 창문은 반드시 열려야하는 것은 아니지만 브라우저에서 열립니다.

-> httplib2. 나는 이것이 훌륭하다고 생각하지만, Javascript로 재생하면 의심 스럽다. 예를 들어 .cache를 사용하고 옵션을 가져 옵니까?

import httplib2 
conn = httplib2.Http(".cache") 
page = conn.request(u"http://the_url","GET") 

-> 풍차. '셀레늄'참조. 그러나 나는 'Man of La Mancha'를 부르기에 충분할 정도로 키가 작다. > 구글의 webscraping 코드 -

. Javascript가 많은 페이지를 다운로드하려고 시도하면 긍정적 인 결과가 나타 납니까?

나는 "브라우저없이 브라우저를 에뮬레이트"하는 것에 관한 잡담을 읽었습니다. Mechanize와 같지만, 현재 알고있는 Python3에서는 그렇지 않습니다.

:: 내 질문 :

이 제안, 포인터, 솔루션 또는 방향을 "여기에 보면"어떤?

많은 감사,

마일, 먼지 사막 마을 사람.

+0

최소한 세션 쿠키 확인없이 Ajax 요청을 사용하여 다른 도메인의 요청을 필터링하면 JavaScript를 사용하여 요청을 처리하면 기본적으로 정말 쉽습니다. –

답변

11

페이지가 자바 스크립트를 통해 데이터를로드하면 XMLHttpRequest 함수 (XHR)를 통해 해당 데이터를 가져 오기 위해 서버에 요청해야합니다. wget을 사용하여 어떤 요청을하는지 파악한 다음 직접 만들 수 있습니다!

그들이하는 요청을 확인하려면 웹 속성 (Chrome 및 Safari) 또는 방화 광 (Firefox)을 사용하십시오. Chrome에서 수행하는 방법은 다음과 같습니다.

공구 모양/공구/개발자 도구/네트워크 (맨 위 탭)/하단의 XHR 필터. 당신이 XHR 요청 URL을 자세히 보면

Here's an example request they make in javascript

, 모든 후행 반환 동일한 형식을 가지고주의 사항 :

http://performance.morningstar.com/Performance/cef/trailing-total-returns.action?t=

당신은 t을 지정해야합니다. 예를 들면 :

http://performance.morningstar.com/Performance/cef/trailing-total-returns.action?t=VAW 이제 http://performance.morningstar.com/Performance/cef/trailing-total-returns.action?t=INTC http://performance.morningstar.com/Performance/cef/trailing-total-returns.action?t=VHCOX

할 수 있습니다 wget 그 URI에 직접 데이터를 구문 분석합니다.

+3

나는 포인트 - 채찍질을 중지해야합니다. "Chrome은 XHR 요청을 매우 쉽게 볼 수있게합니다. 개발자 도구 (렌치 또는 오른쪽 클릭/검사 요소)/네트워크 (탭 상단에있는 탭)는 기본적으로 올바른 답변을 얻는 데 도움이됩니다. 도구)/바닥에 XHR 필터가 있습니다. " –

+1

XHR에 의해 그는 JS에서 직접 HTTP 요청을 의미합니다. 아니면 아약스 야. (차라리 우리는하지 않았다.) 스크래핑하면 테이블과 JSON 만 있으면됩니다. 나쁘지 않다. –

+1

감사합니다. Erik! :) 나는 내 대답을 좀 더 명확하게 고쳐 줄 것이다. 이전에 Chrome에서 dev 도구를 사용하지 않은 사람은 이해하기 쉽지 않습니다. –