循环刮刀

时间:2012-12-17 12:28:16

标签: python loops web-scraping beautifulsoup

我正在尝试从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)

2 个答案:

答案 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的工作原理,但它们提供了一个关于如何开始的优秀快速教程。