Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python选择下拉菜单、美化组和机械化_Python_Beautifulsoup_Mechanize - Fatal编程技术网

使用python选择下拉菜单、美化组和机械化

使用python选择下拉菜单、美化组和机械化,python,beautifulsoup,mechanize,Python,Beautifulsoup,Mechanize,我试图从一个看起来像是AJAXWebPage的页面中获取数据。数据每秒自动刷新一次 我似乎无法确定我是否选择了正确的下拉列表,或者页面是否正在更改为需要刮取的数据 谢谢 !/usr/bin/env python import mechanize from bs4 import BeautifulSoup import re import urllib2 #import html2text import time # Set credentials venue = "sp" # Manches

我试图从一个看起来像是AJAXWebPage的页面中获取数据。数据每秒自动刷新一次

我似乎无法确定我是否选择了正确的下拉列表,或者页面是否正在更改为需要刮取的数据

谢谢

!/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))

通常,ajax调用是由在目标网页上运行JS的异步请求触发的

据我所知,mechanize.Browser不是真正的浏览器,它不能执行和理解javascript,不能发送异步请求

在我看来,这就是您实际上试图输入到BS4的页面没有真正加载的原因,这就是您无法选择的原因

我可以想出两个选择:

  • 使用或(无头)作为浏览器
  • 分析网络并尝试找出网页正在执行的请求,然后模拟ajax请求,而不是尝试加载整个页面

  • 这是非常有意义的,因为目标是环绕桌子的div,它甚至不会显示空桌子。。。显然,因为JS还没有加载它。非常感谢。至少我现在有了另一个攻击计划!