Python 美丽的校园网-纽约马拉松赛

Python 美丽的校园网-纽约马拉松赛,python,web-scraping,html-parsing,beautifulsoup,screen-scraping,Python,Web Scraping,Html Parsing,Beautifulsoup,Screen Scraping,我正试图通过编程将这里找到的所有纽约市马拉松比赛数据整理成CSV 两个问题: 我想不出一种方法来迭代所有不同的年份,而不手动提供对应于所有0-99岁年龄组的一年的URL。 只关注一个对应于一年数据的URL,我的代码不会发现任何表 def ScrapTimeURL: f=urllib.urlopenurl s=f.read 打印读取:,镜头,字节 f、 接近 汤=美汤 印花汤 迭代所有行 对于表中的行。findAll'tr': col=行。findAll'td' FirstName=col[0]

我正试图通过编程将这里找到的所有纽约市马拉松比赛数据整理成CSV

两个问题:

我想不出一种方法来迭代所有不同的年份,而不手动提供对应于所有0-99岁年龄组的一年的URL。 只关注一个对应于一年数据的URL,我的代码不会发现任何表

def ScrapTimeURL: f=urllib.urlopenurl s=f.read 打印读取:,镜头,字节 f、 接近 汤=美汤 印花汤 迭代所有行 对于表中的行。findAll'tr': col=行。findAll'td' FirstName=col[0]。字符串的第一列应具有runner的秩 LastName=col[1]。字符串 def主: url2013=http://web2.nyrrc.org/cgi-bin/htmlos.cgi/2112.12.076919132010781094
ScrapTimeUrl2013您需要一些东西来填写搜索表单并解析结果。你需要更多的自动化

下面是一个使用库的解决方案。我已经添加了注释,但是如果您对代码有任何疑问,请告诉我:

from bs4 import BeautifulSoup
import mechanize

url = "http://web2.nyrrc.org/cgi-bin/start.cgi/mar-programs/archive/archive_search.html"

browser = mechanize.Browser()
browser.addheaders = [
    ('user-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3'),
    ('accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
]
browser.set_handle_robots(False)

# get years
browser.open(url)
browser.form = list(browser.forms())[0]
select = browser.form.controls[3]
years = [item.name for item in select.get_items()]

# process year by year
for year in years:
    print "Processing year=" + year

    # open up search form again, fill out an appropriate year and submit
    browser.open(url)
    browser.form = list(browser.forms())[0]
    select = browser.form.controls[3]

    browser.form['input.searchyear'] = [year]
    browser.form['search.method'] = ['search.flat']
    browser.submit()

    # get overall winners
    soup = BeautifulSoup(browser.response())
    print soup.find(text='Overall Winners').parent.parent.parent.find_next_sibling('tr').find('pre').text
它打印:

Processing year=2013

  Men   GEOFFREY MUTAI, Kenya           2:08:24
Women   PRISCAH JEPTOO, Kenya           2:25:07

Processing year=2011

  Men   GEOFFREY MUTAI, Kenya           2:05:06
Women   FIREHIWOT DADO, Ethiopia        2:23:15

...

基本上,它打开了一个搜索表单,从选择下拉列表中获取所有可能的年份。然后,年复一年,它提交表单并使用解析结果。

有时我会出现错误,URLError:@Parseltongue这可能是因为访问站点太频繁了。尝试添加延迟时间。请求之间的睡眠。。