Извлеките href и текст в одной строке, используя Xidel, только конкретные ссылки - PullRequest
1 голос
/ 07 марта 2019

Я пытаюсь извлечь ссылку (href) и текст внутри тега <a> для количества ссылок на html-странице.

Мне нужны только определенные ссылки, которые соответствуют подстроке.

Пример моего html:

<a href="/this/dir/1234/">This should be 1234</a> some other html
<a href="/this/dir/1236/">This should be 1236</a> some other html
<a href="/about_us/">Not important link</a> some other html

Я использую Xidel, что позволяет мне избегать регулярных выражений,Это кажется самым простым для работы.

То, что у меня есть до сих пор:

xidel -e "//a/(@href[contains(.,'/this/dir')],text())"

В принципе это работает, но остаются две проблемы:

  • Iполучить данные, разделенные переводом строки.Я хотел бы, чтобы он был в одной строке.
  • Каждый текст ссылки возвращается, поэтому я также получаю текст "Не важная ссылка".

Какой рекомендуемый способ получениявывод как

/this/dir/1234  ; This should be 1234
/this/dir/1236  ; This should be 1236

Цените любые отзывы / советы.

edit :

Решение, предоставленное Мартином, было на 99% там.Новые строки не выводились, поэтому я использую awk для замены фиктивного текста на новые строки.

note : Я нахожусь в Windows.

xidel myhtml.htm -e "string-join(//a[contains(@href, '/this/dir')]!(@href || ' ; ' || .), 'XXX')" | awk -F "XXX" "{$1=$1}1" "OFS=\n" 

1 Ответ

0 голосов
/ 07 марта 2019

Вы можете переместить условие в предикат, например, //a[contains(@href, '/this/dir')]!(@href, string()).Что касается формата результата, что произойдет, если вы делегируете все в XQuery с

string-join(//a[contains(@href, '/this/dir')]!(@href || ' ; ' || .), '&#10;')
...