2016-10-25 3 views
1

Я пытаюсь очистить данные от того, что кажется веб-сайтом ajax. Данные автоматически обновляются каждую секунду.Выбор выпадающего списка с помощью 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 не настоящий браузер, он не может выполнить и понять javascript, он не может отправлять асинхронные запросы.

По-моему, именно та страница, которую вы на самом деле пытаетесь ввести в BS4, действительно не загружена, поэтому вы не можете выбрать.

Я могу думать о двух варианта:

  1. Использование selenium или phantomJS (без головы) в качестве браузера.
  2. Анализ сети и попытаться выяснить, какие запросы на веб-странице делает, а затем просто имитируя Аякса запросы, вместо того, чтобы пытаться загрузить всю страницу
+1

Это имеет смысл, как ориентация на DIV, который оборачивает вокруг стола даже не покажет пустую таблицу ... Очевидно, поскольку он еще не загружен JS. Спасибо! У меня, по крайней мере, сейчас есть альтернативный план атаки! –

Смежные вопросы