2016-11-05 6 views
0

Python 3Использование запросов и LXML, получить HREF значения для строк в таблице

Я с трудом Перебор строк таблицы.

Как перечислить компонент tr[1] через количество строк в теле таблицы для командыName, 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 

 Смежные вопросы

  • Нет связанных вопросов^_^