Python 美丽的校园网-纽约马拉松赛
我正试图通过编程将这里找到的所有纽约市马拉松比赛数据整理成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.076919132010781094Python 美丽的校园网-纽约马拉松赛,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]
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这可能是因为访问站点太频繁了。尝试添加延迟时间。请求之间的睡眠。。