2016-09-07 4 views
1

Ниже код может извлечь PE из ссылки reuters ниже. Однако мой метод не является надежным, так как веб-страница для другого запаса имеет две строки меньше и приводит к смещению данных. Как я могу столкнуться с этой проблемой. Я хотел бы указать прямо на часть PE для извлечения данных, но не знаю, как это сделать. ссылка 1: http://www.reuters.com/finance/stocks/financialHighlights?symbol=MYEG.KL ссылка 2: http://www.reuters.com/finance/stocks/financialHighlights?symbol=ANNJ.KLPython: lxml xpath для извлечения содержимого

from lxml import html 
import lxml 

page2 = requests.get('http://www.reuters.com/finance/stocks/financialHighlights?symbol=MYEG.KL') 
treea = html.fromstring(page2.content) 
tree4 = treea.xpath('//td[@class]/text()') 
PE= tree4[37] 

Это часть я хочу, что код может извлечь только эту часть, так что любые изменения в веб-страницы не будут затронуты.

<tr class="stripe"> 
       <td>P/E Ratio (TTM)</td> 
       <td class="data">36.79</td> 
       <td class="data">25.99</td> 
       <td class="data">21.70</td> 
      </tr> 

ответ

0

Используйте текст, чтобы найти первый тд затем извлечь родственный ТД:

treea.xpath('//td[contains(.,"P/E Ratio")]/following-sibling::td/text()') 

Это будет работать независимо:

In [8]: page2 = requests.get('http://www.reuters.com/finance/stocks/financialHighlights?symbol=MYEG.KL') 

In [9]: treea = html.fromstring(page2.content)  
In [10]: tree4 = treea.xpath('//td[contains(.,"P/E Ratio")]/following-sibling::td/text()') 

In [11]: print(tree4) 
['36.79', '25.99', '21.41'] 

In [12]: page2 = requests.get('http://www.reuters.com/finance/stocks/financialHighlights?symbol=ANNJ.KL') 
In [13]: treea = html.fromstring(page2.content) 

In [14]: tree4 = treea.xpath('//td[contains(.,"P/E Ratio")]/following-sibling::td/text()') 

In [15]: print(tree4) 
['--', '25.49', '17.30'] 
Смежные вопросы