2016-10-25 37 views
1

私はajax webapageのようなものからデータを削り取ろうとしています。データは毎秒自動更新されます。python、beautifulsoup、mechanizeでドロップダウンを選択する

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

通常のAJAX呼び出しがJSが

限り私はmechanize.Browserが実際のブラウザではありません知っているように、ターゲットのWebページ上で実行されていると、非同期リクエストによってトリガされ、それが実行し、することはできませんJavaScriptを理解すると、非同期要求を送信することはできません。

私の意見では、実際にBS4に入力しようとしているページが本当に読み込まれていないという理由から、選択できません。

私は2つのオプションを考えることができます。ブラウザとして

  1. 使用seleniumまたはphantomJS(ヘッドレス)。
  2. テーブルの周りにラップのdivをターゲットとして、これは完璧な理にかなって
+1

をネットワークを分析し、Webページがやって、その後、ちょうどAJAXリクエストをシミュレートしている要求何かを見つけるしてみてください、代わりにページ全体をロードしようとしていますどちらも空のテーブルを表示しません...それはまだJSによってロードされていないので、明らかに。 ありがとうございます!私は少なくとも今、代替の攻撃計画を持っています! –

関連する問題