0

我正在尝试从http://www.basketball-reference.com/boxscores/201112250DAL.html 获取常规赛季球队所有比赛的数据。我让所有其他数据农业功能正常工作,我遇到的问题是循环刮板。这是我用来获取下一页 URL 的测试代码。我可以使用它来获取一支球队在常规赛期间打过的所有 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)
4

2 回答 2

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']
于 2012-12-17T20:03:46.020 回答
0

最简单的方法是使用scrapy。它会自动为您跟随链接。

它允许您轻松创建复杂的规则来遵循和忽略哪些 url。然后,Scrapy 将遵循与您的规则匹配的任何 url。它确实需要您了解 scrapy 的工作原理,但它们提供了一个很好的快速入门教程。

于 2012-12-18T14:42:52.367 回答