2016-10-21 7 views
0

以内に私は、次のWebサイトで探していません:BeautifulSoupは:アクセス情報は、TD

https://modules.ussquash.com/ssm/pages/leagues/League_Information.asp?leagueid=1859

私は各大学の名前と、それに関連付けられたHREFを抽出したいです。だから、最初のエントリのために私はStanfordhttps://modules.ussquash.com/ssm/pages/leagues/Team_Information.asp?id=18564

私はBeautifulSoupを使用してすべてのTDを持っているポイントになってきた。私は学校とそのhrefを抽出するのが難しいです。ここで

は私の試みです:

def main(): 
    r = requests.get('https://modules.ussquash.com/ssm/pages/leagues/League_Information.asp?leagueid=1859') 
    data = r.text 
    soup = BeautifulSoup(data) 
    table = soup.find_all('table')[1] 
    rows = table.find_all('tr')[1:] 
    for row in rows: 
     cols = row.find_all('td') 
     print(cols) 

私はcols[0]にアクセスしようとすると、私が手:

IndexError: list index out of range 

これは素晴らしいだろう修正するためにどのように任意のアイデアを!

おかげ

答えて

3

最初の2つのTRのは何TDタグを持たないthead要素であり、最初の2つのTRのスキップしたい:あなたが望む結果を得るために

rows = table.find_all('tr')[2:] 

CSSセレクタを使用して簡略化できます。

また

のhrefはあなたがベースURLにそれを参加させる必要があるので、相対パスです:

import requests 
from bs4 import BeautifulSoup 
from urllib.urlparse import urljoin 

def main(): 
    base = "https://modules.ussquash.com/ssm/pages/leagues/" 
    r = requests.get('https://modules.ussquash.com/ssm/pages/leagues/League_Information.asp?leagueid=1859') 
    data = r.text 
    soup = BeautifulSoup(data) 

    table = soup.find_all('table', limit=2)[1] 
    # skip first two tr's 
    rows = table.select("tr + tr + tr") 

    for row in rows: 
     a = row.select_one("td a") 
     print(a.text, urljoin(base, a["href"])) 
関連する問題