Я пытаюсь получить информацию из div на основе даты, которую я держу в качестве переменной, затем я пытаюсь отфильтровать возвращенные результаты на основе другой переменной, чтобы сузить список результатов до одного совпадения, чтобы извлечь URL.
Пример HTML страницы, в ней будет еще 10 элементов с различной информацией. Одна и та же дата может появляться более одного раза.
<div class="bhangra-artist details ">
<div class="bhangra-artist card">
<div class="bhangra-artist-title" style="text-overflow: none;">
<a href="/bhangra/artist/album/id/123456/title-of-the-album/" data-trackid="title of the album" title="Title Of The Album" style="position: relative; left: 0px;">
Title Of The Album </a>
</div>
<div class="artist-names">
<a href="/bhangra/artist/profile/id/1234/artist-name/" data-trackid="Artist Name goes here" title="Artist Name">Artist Name</a> </div>
<time>
September 08, 2018 </time>
<div class="release-information">
<a class="date-of-release" href="releases-today" data-trackid="releases today" title="releases today">
<span class="label-left-box">releases today</span>
<span class="label-text">releases today</span>
</a>
<span class="label-hd "></span>
</div>
</div>
В моем сценарии я бегу
DATE=$(cat html.txt | sed -n -e '/bhangra-artist card/,/<\/time>/ p' )
echo "${DATE}"
Это возвращает ниже, но все результаты, так что их около 10 совпадений вернулось. Я просто показываю пример 3.
<div class="bhangra-artist card">
<div class="bhangra-artist-title" style="text-overflow: none;">
<a href="/bhangra/artist/album/id/123456/title-of-the-album/" data-trackid="title of the album" title="Title Of The Album" style="position: relative; left: 0px;">
Title Of The Album </a>
</div>
<div class="artist-names">
<a href="/bhangra/artist/profile/id/1234/artist-name/" data-trackid="Artist Name goes here" title="Artist Name">Artist Name</a> </div>
<time>
September 08, 2018 </time>
<div class="bhangra-artist card">
<div class="bhangra-artist-title" style="text-overflow: none;">
<a href="/bhangra/artist/album/id/123456/title-of-the-album/" data-trackid="title of the album" title="Title Of The Album" style="position: relative; left: 0px;">
Title Of The Album </a>
</div>
<div class="artist-names">
<a href="/bhangra/artist/profile/id/1234/artist-name/" data-trackid="Name Artist goes here" title="Name Artist">Name Artist</a> </div>
<time>
September 08, 2018 </time>
<div class="bhangra-artist card">
<div class="bhangra-artist-title" style="text-overflow: none;">
<a href="/bhangra/artist/album/id/123456/title-of-the-album/" data-trackid="title of the album" title="Title Of The Album" style="position: relative; left: 0px;">
Title Of The Album </a>
</div>
<div class="artist-names">
<a href="/bhangra/artist/profile/id/1234/artist-name/" data-trackid="Artist1 Name & Artist2 Name" title="Artist1 Name & Artist2 Name">Artist1 Name & Artist2 Name</a> </div>
<time>
September 05, 2018 </time>
С возвращенными результатами я сейчас пытаюсь сузить их до одного результата.
У меня есть переменная с именем $ ReleaseDate, которая будет иметь значение 08 сентября 2018
Так что теперь, когда у $ {DATE} есть 10 различных div с датами, мне нужно сопоставить все те, которые содержат дату в $ ReleaseDate. Это часть, в которой я не уверен, как это сделать.
Я ожидаю, что результаты будут сужены до переменной даты, поэтому в приведенном выше примере я бы ожидал, что 3 результата снизятся до 2 результатов.
<div class="bhangra-artist card">
<div class="bhangra-artist-title" style="text-overflow: none;">
<a href="/bhangra/artist/album/id/123456/title-of-the-album/" data-trackid="title of the album" title="Title Of The Album" style="position: relative; left: 0px;">
Title Of The Album </a>
</div>
<div class="artist-names">
<a href="/bhangra/artist/profile/id/1234/artist-name/" data-trackid="Artist Name goes here" title="Artist Name">Artist Name</a> </div>
<time>
September 08, 2018 </time>
<div class="bhangra-artist card">
<div class="bhangra-artist-title" style="text-overflow: none;">
<a href="/bhangra/artist/album/id/123456/title-of-the-album/" data-trackid="title of the album" title="Title Of The Album" style="position: relative; left: 0px;">
Title Of The Album </a>
</div>
<div class="artist-names">
<a href="/bhangra/artist/profile/id/1234/artist-name/" data-trackid="Name Artist goes here" title="Name Artist">Name Artist</a> </div>
<time>
September 08, 2018 </time>
Как только я сузил результаты от 10 до результатов, соответствующих моей переменной даты, у них останется 1-3 результата. Так что теперь мне нужно отфильтровать это до 1 результата.
У меня есть окончательная переменная $ artistName. К сожалению, она содержит «Имя исполнителя Имя альбома», поэтому я просто сопоставляю первое слово, которое всегда будет именем исполнителя.
Поэтому я хочу сопоставить $ artistName со строкой «Имя исполнителя», как только это будет сделано, я хочу удалить содержащийся div и все остальные div, чтобы у меня остался один результат.
<div class="bhangra-artist card">
<div class="bhangra-artist-title" style="text-overflow: none;">
<a href="/bhangra/artist/album/id/123456/title-of-the-album/" data-trackid="title of the album" title="Title Of The Album" style="position: relative; left: 0px;">
Title Of The Album </a>
</div>
<div class="artist-names">
<a href="/bhangra/artist/profile/id/1234/artist-name/" data-trackid="Artist Name goes here" title="Artist Name">Artist Name</a> </div>
<time>
September 08, 2018 </time>
Раз у меня только один результат. Я пытаюсь получить ссылку на этот альбом. Я полагаю, что уже могу нацелиться на это, но я сопоставляю его с html, поэтому все экземпляры, поскольку я не могу отфильтровать div на основе имеющихся у меня переменных.
<a href="/bhangra/artist/album/id/123456/title-of-the-album/" data-trackid="title of the album" title="Title Of The Album" style="position: relative; left: 0px;">
Title Of The Album </a>
Конечный результат: / bhangra / исполнитель / альбом / id / 123456 / название альбома /
У меня есть определенные элементы, но я полностью застрял в том, как собрать все это вместе.
Итак, резюмируем: -
Мои переменные и значения: -
$DATE=September 08, 2018
$artistName=Artist Name Name Of The Album
Код, который у меня есть.
#!/bin/bash
echo "date : ${DATE}" #This has the value September 08, 2018
echo "artist: ${artistName}" #This has the value Artist Name Name Of The Album
# Get HTML and find the DIV's containing the information that is required.
# GetContainer Reads the html file html.txt, using sed to target the entire bhangra artist panel until the time section. This returns 10 results.
GetContainer=$(cat html.txt | sed -n -e '/bhangra-artist details/,/<\/time>/ p' )
IFS=$OIFS
# Run GetContainer into another variable called filterDATE and now search this for a date retain the containing div and remove all other results. This step should take the results down from 10 results to only a handful 1-3 usually.
As the the date match would only return 1-3 results in total.
filterDATE=$(echo -n "$GetContainer" )
filterDATE=$(echo -n "$filterDATE" ) #Unsure how to do this so this step is blank as I am unsure how to verify the selected date against my variable $DATE and the get all of the outer div.
# Now that I only have 1-3 results I want to narrow this down to one result.
Using $artistName retain the containing div and remove all other results. This step would mean that I should now only be left with 1 result.
# Once I have narrowed down the results to 1 strip away html so that only the link is remaining. I guess at this point I need to use the results from filterDATE but for now I am checking I can pull back the link from the raw html.
GETURL=$(cat html.txt | sed -n -e '/bhangra-artist-title/,/<\/a>/ p' | grep "bhangra" | sed 's/<a href=\"//g' | sed 's/"//g' )
echo "${DATE}"
echo "${filterDATE}"
echo "${GETURL}"
Любая помощь будет оценена.