2013-05-12 83 views
0

我想刮这个页面的一些链接。拉链接和刮python这些网页

http://www.covers.com/pageLoader/pageLoader.aspx?page=/data/wnba/teams/pastresults/2012/team665231.html 

这会得到我想要的链接。

boxurl = urllib2.urlopen(url).read() 
soup = BeautifulSoup(boxurl) 
boxscores = soup.findAll('a', href=re.compile('boxscore')) 

我想从页面上抓取每个boxscore。我已经制作了代码来抓取比分,但是我不知道如何得到它们。

编辑

我想这样会比较好,因为它剔除了html标签。我仍然需要知道如何打开它们。

for link in soup.find_all('a', href=re.compile('boxscore')): 
    print(link.get('href')) 

EDIT2: 我这是怎么凑一些数据从页面的第一个链接。

url = 'http://www.covers.com/pageLoader/pageLoader.aspx?page=/data/wnba/results/2012/boxscore841602.html' 


boxurl = urllib2.urlopen(url).read() 
soup = BeautifulSoup(boxurl) 
def _unpack(row, kind='td'): 
    return [val.text for val in row.findAll(kind)] 

tables = soup('table') 
linescore = tables[1] 
linescore_rows = linescore.findAll('tr') 
roadteamQ1 = float(_unpack(linescore_rows[1])[1]) 
roadteamQ2 = float(_unpack(linescore_rows[1])[2]) 
roadteamQ3 = float(_unpack(linescore_rows[1])[3]) 
roadteamQ4 = float(_unpack(linescore_rows[1])[4]) 

print roadteamQ1, roadteamQ2, roadteamQ3, roadteamQ4 

但是,当我尝试这个。

url = 'http://www.covers.com/pageLoader/pageLoader.aspx? page=/data/wnba/teams/pastresults/2012/team665231.html' 
boxurl = urllib2.urlopen(url).read() 
soup = BeautifulSoup(boxurl) 

tables = pages[0]('table') 
linescore = tables[1] 
linescore_rows = linescore.findAll('tr') 
roadteamQ1 = float(_unpack(linescore_rows[1])[1]) 
roadteamQ2 = float(_unpack(linescore_rows[1])[2]) 
roadteamQ3 = float(_unpack(linescore_rows[1])[3]) 
roadteamQ4 = float(_unpack(linescore_rows[1])[4]) 

我得到这个错误。 表= pages0类型错误:“STR”对象不是可调用

print pages[0] 

吐出所有像正常的第一链路的HTML的。希望这不是太混乱。总而言之,我现在可以获得链接,但仍然可以从中获得。

+0

如果您正在使用的页面作为“爬行”的基础 - 你可能希望看看[scrapy](http://scrapy.org) – 2013-05-13 13:27:21

+0

现在你的问题更清晰,你可能想看看以前的答案我做过http://stackoverflow.com/questions/ 15866297 /匹配特定表格内的html-beautifulsoup/15866957#15866957所有你需要做的就是系统地工作,这并不难,只是单调乏味! – Vorsprung 2013-05-13 18:30:02

+0

我通常可以找到和刮我想要的表。在这种情况下,它是网页上的第二个表格。所以tables = soup('table') linescore = tables [1]选择我想要的表格。我遇到麻烦的地方是从链接打开网页,然后选择表格。 – user2333196 2013-05-13 19:20:30

回答

1

像这样拉找到的链接到一个数组中的所有页面,所以第一页页[0],第二页[1]等

boxscores = soup.findAll('a', href=re.compile('boxscore')) 
basepath = "http://www.covers.com" 
pages=[] 
for a in boxscores: 
    pages.append(urllib2.urlopen(basepath + a['href']).read()) 
+0

是的,这工作,但我不能从它刮。我将在原始问题中更多地解释这个问题。 – user2333196 2013-05-13 17:30:48