2015-07-02 4 views
4

Написание xpath-переопределений по-прежнему остается для меня проблемой после прохождения тренировочных блогов и W3schools от import.io. Я пытаюсь извлечь значения атрибутов с сайта, где информация не всегда находится в одном месте, поэтому я знаю, что мне нужно написать переопределение xpath. HTML является:Ручное переключение xpath для import.io с тегом dt

<dt>3TG:</dt> 
<dd>Does not contain 3TG</dd> 
<dt>Contract Catalog Item:</dt> 
<dd>Y</dd> 
<dt>Diameter:</dt> 
<dd>3/8"</dd> 
<dt>Diameter-Thread Size:</dt> 
<dd>3/8"-16</dd> 
<dt>Finish:</dt> 
<dd>Zinc</dd> 
<dt>Grade:</dt> 
<dd>5</dd> 
<dt>Length:</dt> 
<dd>1"</dd> 
<dt>Material:</dt> 
<dd>Steel</dd> 

является XPath

//*[@id="main"]/div[1]/div[4]/div/div[1]/div[1]/dl/dt[4] 

Я попытался

//*[@id="main"]/div[1]/div[4]/div/div[1]/div[1]/dl/dt[contains(text(), "Finish")]/following-sibling::dt/text() 

и

//*[@id="main"]/div[1]/div[4]/div/div[1]/div[1]/dl/td/dd[.="Finish:"]/following::dd 

но не повезло. Я не уверен, что это следующий или следующий брат. Любая помощь приветствуется.

+0

Можете ли вы предоставить URL сайта? Каковы точные данные, которые вы хотите извлечь? –

+0

Вы указываете слишком большой порядок элементов. Если веб-сайт изменяет макет между запросами, данные, которые были в div [1], например, теперь могут быть в div [2], и вы не можете получить правильный результат. Можете ли вы предоставить сайт, пожалуйста? Вы также можете использовать оператор OR и покрывать случаи, которые вы знаете. Некоторые данные могут соответствовать более чем одному условию OR, но вы можете их очистить впоследствии. Важная вещь - получение данных! –

ответ

0
//*[text()="XXXX"]/following-sibling::* 

Изменение XXXX на вещь, которую вы хотите

EG: Если вы хотите узнать информацию о «3TG:» это будет выглядеть следующим образом.

//*[text()="3TG:"]/following-sibling::* 

<dt>3TG:</dt> 
<dd>Does not contain 3TG</dd> 

Так XPATH находит любой элемент с текстом «3TG:» независимо от тега, а затем смотрит на следующий собрата (то, что рядом с ним).

Чтобы сделать его более специфичные для вашего списка определений вы можете добавить больше конкретики, как это:

//dt[text()="3TG:"]/following-sibling::dd 

<dt>3TG:</dt> 
<dd>Does not contain 3TG</dd>