Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.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_Drop Down Menu_Web Scraping_Beautifulsoup_Html Parsing - Fatal编程技术网

Python 从下拉列表中的选定选项中删除响应

Python 从下拉列表中的选定选项中删除响应,python,drop-down-menu,web-scraping,beautifulsoup,html-parsing,Python,Drop Down Menu,Web Scraping,Beautifulsoup,Html Parsing,这是一个页面示例,该页面列出选定球员的棒球统计数据,默认为最近一年(2014年,即将于2015年) 下拉列表允许用户将所选年份追溯到2010年,但不会更改显示的url。如何从下拉列表中的每个值中提取所有可用年份 我目前正在使用Python和BeautifulSoup,但我愿意使用任何可以完成工作的工具 <select name="ctl00$ctl00$cphContainer$cphContents$ddlYear" onchange="javascript:

这是一个页面示例,该页面列出选定球员的棒球统计数据,默认为最近一年(2014年,即将于2015年)

下拉列表允许用户将所选年份追溯到2010年,但不会更改显示的url。如何从下拉列表中的每个值中提取所有可用年份

我目前正在使用Python和BeautifulSoup,但我愿意使用任何可以完成工作的工具

<select name="ctl00$ctl00$cphContainer$cphContents$ddlYear"     
        onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;ctl00$ctl00$cphContainer$cphContents$ddlYear\&#39;,\&#39;\&#39;)&#39;, 0)" 
        id="cphContainer_cphContents_ddlYear" 
        class="select02 mgt30">
<option value="2014">2014</option>
<option value="2013">2013</option>
<option selected="selected" value="2012">2012</option>
<option value="2011">2011</option>
<option value="2010">2010</option>

2014
2013
2012
2011
2010
分两步进行:

  • 发出GET请求,解析HTML并提取表单输入值
  • 将请求后解析输入值与负责年份的
    ctl00$ctl00$cphContainer$cphContents$ddlYear
    参数一起生成
2013年的实施示例(使用
请求
美化小组
):

这将打印2013年所有统计表的内容:

[u'KIA', u'16', u'0.364', u'55', u'8', u'20', u'3', u'0', u'3', u'11', u'5', u'0', u'14', u'0', u'14', u'1']
[u'LG', u'15', u'0.321', u'53', u'7', u'17', u'1', u'0', u'2', u'9', u'1', u'1', u'6', u'3', u'10', u'2']
[u'NC', u'16', u'0.237', u'59', u'5', u'14', u'2', u'0', u'2', u'10', u'2', u'0', u'3', u'0', u'17', u'2']
[u'SK', u'16', u'0.235', u'51', u'7', u'12', u'1', u'0', u'3', u'13', u'1', u'3', u'13', u'1', u'12', u'4']
[u'\ub450\uc0b0', u'16', u'0.368', u'57', u'16', u'21', u'2', u'1', u'4', u'21', u'2', u'1', u'12', u'0', u'13', u'2']
[u'\ub86f\ub370', u'16', u'0.375', u'56', u'9', u'21', u'4', u'0', u'3', u'13', u'4', u'3', u'11', u'0', u'9', u'3']
[u'\uc0bc\uc131', u'16', u'0.226', u'62', u'8', u'14', u'5', u'0', u'3', u'10', u'0', u'0', u'8', u'1', u'15', u'1']
[u'\ud55c\ud654', u'15', u'0.211', u'57', u'7', u'12', u'3', u'0', u'2', u'9', u'0', u'0', u'1', u'1', u'19', u'3']
...

使用Mechanize和Ruby的示例。修改表单字段并提交

#!/usr/bin/env ruby

require 'mechanize'

agent = Mechanize.new{ |agent| agent.history.max_size=0 }

agent.user_agent = 'Mozilla/5.0'

url = "http://www.koreabaseball.com/Record/Player/HitterDetail/Game.aspx?playerId=76325"

page = agent.get(url)

form = page.forms[0]

p form['ctl00$ctl00$cphContainer$cphContents$ddlYear']

form['ctl00$ctl00$cphContainer$cphContents$ddlYear'] = 2013

page = form.submit

form = page.forms[0]

p form['ctl00$ctl00$cphContainer$cphContents$ddlYear']

你能看到那张桌子的来源并把它刮干净吗?我现在没有机会测试,但是看到你的结果我相信它是好的。我已经知道这些值的范围是从2010年到2014年,尽管有些球员会因为没有在特定的赛季参加比赛而获得零回报。
#!/usr/bin/env ruby

require 'mechanize'

agent = Mechanize.new{ |agent| agent.history.max_size=0 }

agent.user_agent = 'Mozilla/5.0'

url = "http://www.koreabaseball.com/Record/Player/HitterDetail/Game.aspx?playerId=76325"

page = agent.get(url)

form = page.forms[0]

p form['ctl00$ctl00$cphContainer$cphContents$ddlYear']

form['ctl00$ctl00$cphContainer$cphContents$ddlYear'] = 2013

page = form.submit

form = page.forms[0]

p form['ctl00$ctl00$cphContainer$cphContents$ddlYear']