2016-11-05 5 views
0

Python 3要求とlxmlを使用してテーブル内の行のhref値を取得する

テーブルの行を繰り返し処理するのは難しいです。

tr[1]コンポーネントを、teamName、teamState、teamLink xpathsのテーブル本体の行数で反復処理するにはどうすればよいですか?私は、次を介してこれをも試みた

import lxml.html 
from lxml.etree import XPath 
url = "http://www.maxpreps.com/rankings/basketball-winter-15-16/7/national.htm" 

rows_xpath = XPath('//*[@id="rankings"]/tbody) 
teamName_xpath = XPath('//*[@id="rankings"]/tbody/tr[1]/th/a/text()') 
teamState_xpath = XPath('//*[@id="rankings"]/tbody/tr[1]/td[2]/text()') 
teamLink_xpath = XPath('//*[@id="rankings"]/tbody/tr[1]/th/a/@href') 

html = lxml.html.parse(url) 

for row in rows_xpath(html): 
    teamName = teamName_xpath(row) 
    teamState = teamState_xpath(row) 
    teamLink = teamLink_xpath(row) 
    print (teamName, teamLink) 

from lxml import html 
import requests 

siteItem = ['http://www.maxpreps.com/rankings/basketball-winter-15-16/7/national.htm' 
      ] 

def linkScrape(): 
    page = requests.get(target) 
    tree = html.fromstring(page.content) 

#Get team link 
    for link in tree.xpath('//*[@id="rankings"]/tbody/tr[1]/th/a/@href'): 
     print (link) 
#Get team name   
    for name in tree.xpath('//*[@id="rankings"]/tbody/tr[1]/th/a/text()'): 
     print (name) 
#Get team state   
    for state in tree.xpath('//*[@id="rankings"]/tbody/tr[1]/td[2]/text()'): 
     print (state) 

for target in siteItem: 
    linkScrape() 

を見ていただきありがとうございます:D

+0

本当にできないのお手伝いをする方法を、ちょうど場合は、そのヒントを落とす今、行ごとに、必要なデータを抽出XML/HTMLを解析する必要があります。BeatfiulSoupは純粋なlxmlよりも優れたオプションです。 lxmlを強制的に使用しない場合は、そのライブラリをチェックしてください。 –

+0

私はあなたがしようとしていることについてはっきりしていません。あなたの例のコードがあなたのニーズをどのように満たしていないかを詳しく説明できますか?特に、私はあなたが "tr [1]コンポーネントを反復"することによって何を意味するか分かりません... – larsks

答えて

0

私はあなたが求めているものを理解していれば、あなたは内の行を反復処理したいですrankingテーブル。したがって、これらの行のループから始めてください。

import lxml.html 
doc = lxml.html.parse('http://www.maxpreps.com/rankings/basketball-winter-15-16/7/national.htm') 

for row in doc.xpath('//table[@id="rankings"]/tbody/tr'): 

これは、そのドキュメントの各行に対して繰り返されます。

team_link = row.xpath('th/a/@href')[0] 
    team_name = row.xpath('th/a/text()')[0] 
    team_state = row.xpath('td[contains(@class, "state")]/text()')[0] 
    print(team_state, team_name, team_link) 

私のシステム上の線に沿って出力が得られます:

CA Manteca /high-schools/manteca-buffaloes-(manteca,ca)/basketball-winter-15-16/rankings.htm 
MD Mount St. Joseph (Baltimore) /high-schools/mount-st-joseph-gaels-(baltimore,md)/basketball-winter-15-16/rankings.htm 
TX Brandeis (San Antonio) /high-schools/brandeis-broncos-(san-antonio,tx)/basketball-winter-15-16/rankings.htm 
関連する問題