我正在尝试从http://www.basketball-reference.com/boxscores/201112250DAL.html获取常规赛中球队所有比赛的数据。我让所有其他数据耕作功能正常工作,我遇到的问题是循环刮刀。 这是我用来获取下一页网址的测试代码。我可以用它来获取团队在常规赛期间所有66场比赛中的数据,但这样做很多打字就是这样。什么是最简单的自动化解决方案?
谢谢!
URL = "http://www.basketball-reference.com/boxscores/201112250DAL.html"
html = urlopen(URL).read()
soup = BeautifulSoup(html)
def getLink(html, soup):
links = soup.findAll('a', attrs={'class': 'bold_text'})
if len(links) == 2:
a = links[0]
a = str(a)
a = a[37:51]
return a
if len(links) == 3:
a = links[1]
a = str(a)
a = a[37:51]
return a
if len(links) == 4:
a = links[3]
a = str(a)
a = a[37:51]
return a
print getLink(html, soup)
URL1 = "http://www.basketball-reference.com/boxscores" + getLink(html, soup) + "html"
print URL1
html1 = urlopen(URL1).read()
soup1 = BeautifulSoup(html1)
print getLink(html1, soup1)
答案 0 :(得分:3)
最简单的方法是转到http://www.basketball-reference.com/teams/DAL/2012_games.html并执行以下操作:
URL = 'http://www.basketball-reference.com/teams/DAL/2012_games.html'
html = urllib.urlopen(URL).read()
soup = BeautifulSoup(html)
links = soup.findAll('a',text='Box Score')
这将返回包含“Box Score”文本的所有<a>
代码的列表。用它来测试:
for link in links:
print link.parent['href']
page_url = 'http://www.basketball-reference.com' + link.parent['href']
从此处,向page_url
发出另一个请求并继续编码。
这是我使用的整个代码,它对我来说非常有用:
from BeautifulSoup import BeautifulSoup
import urllib
url = 'http://www.basketball-reference.com/teams/DAL/2012_games.html'
file_pointer = urllib.urlopen(url)
soup = BeautifulSoup(file_pointer)
links = soup.findAll('a',text='Box Score')
for link in links:
print link.parent['href']
答案 1 :(得分:0)
最简单的方法是使用scrapy。其中会自动关注链接。
它允许您轻松创建要遵循和忽略的URL的复杂规则。然后,Scrapy将遵循符合您规则的任何网址。它确实需要您了解scrapy的工作原理,但它们提供了一个关于如何开始的优秀快速教程。