2016-10-25 4 views
1

아약스 웹 페이지 인 것처럼 보이는 데이터를 긁어 내려고합니다. 자동 초마다 데이터가 새로 고침됩니다.python으로 드롭 다운 선택, beautifulsoup 및 기계화

http://daytonama.clubspeedtiming.com/sp_center/livescore.aspx

나는 페이지가 그때 긁어 데 필요한 데이터로 변경하는 경우 나 또는 올바른 드롭 다운을 선택하고있어 경우에 해결할 수없는 것.

감사

!/usr/bin/env python 
import mechanize 
from bs4 import BeautifulSoup 
import re 
import urllib2 
#import html2text 
import time 

# Set credentials 
venue = "sp" # Manchester (ma), Milton Keynes (mk), Sandown Park (sp), Tamworth (ta) 
track = "3" # Manchester (3), Milton Keynes (1) 

# Open new browser 
br = mechanize.Browser() 

# Target live timing page 
resp = br.open("http://daytona"+ venue +".clubspeedtiming.com/sp_center/livescore.aspx") 
html = resp.read() 

# Grab live data table 
soup = BeautifulSoup(html, "html5lib") 

# Select track layout 
select_node = soup.findAll('select', attrs={'name': 'ddlTrack'}) 

if select_node: 
    for option in select_node[0].findAll('option'): 
     print '' 
     #print option.text 

br.select_form(name = 'form1') 
br.form['ddlTrack'] = [track] 

grid = soup.find("div", { "id" : "grid" }) 
print ''.join(map(str, grid.contents)) 

답변

1

일반적으로 아약스 호출이 JS가

지금까지 내가 mechanize.Browser 실제 브라우저 아니다 알고있는 대상 웹 페이지에서 실행되는 비동기 요청에 의해 촉발되어, 그것을 실행하고 수 없습니다 자바 스크립트를 이해하면 비동기 요청을 보낼 수 없습니다.

제 의견으로는 실제로 BS4에 입력하려는 페이지가 실제로로드되지 않은 이유입니다. 그래서 당신이 선택할 수 없습니다.

나는 두 가지 옵션을 생각할 수 있습니다 : 브라우저로

  1. 사용 selenium 또는 phantomJS (헤드리스).
  2. 네트워크를 분석하고 웹 페이지 대신 전체 페이지
+1

이 테이블 감싸는 사업부를 대상으로 완벽한 의미가 있습니다를로드하려고의 바로 아약스 요청을 시뮬레이션 한 후 일을하고 요청하는 것을 알아보십시오 심지어 빈 테이블을 보여주지 않을 것입니다 ... 분명히 JS에 의해 아직로드되지 않았기 때문에. 감사합니다. 나는 최소한 공격 계획을 가지고있다! –