глядя на синтаксис, я предполагаю, что вы используете версию 0.6.0. Вы должны использовать более точный c css -селектор.
data class MyScrapedData(
val userName: String,
val link: String
)
fun main() {
val githubUserData = skrape {
url = "http://www.website"
extract {
MyScrapedData(
userName = el("div.CollapsiblePanel").text(),
link = el("table tr td a").attr("href")
)
}
}
println("selected user: ${githubUserData.userName}")
println("selected link: ${githubUserData.link}")
// will print:
// Today's Interest (1)
// link info i need in here
}
Более подробную информацию о css селекторах можно найти здесь: https://www.w3schools.com/cssref/css_selectors.asp
Вы также можете попробовать версию 1.0.0-alpha5. Я знаю, что это альфа-версия, но она полностью работает, и вы могли бы делать вещи еще более элегантно.
РЕДАКТИРОВАТЬ: Если вы хотите извлечь несколько ссылок, которые вы можете сделать (используя версию 0.6.0 ) это выглядит следующим образом:
при условии, что HTML, который вы хотите проанализировать, имеет следующую структуру:
<div class="CollapsiblePanelTab" tabindex="0">Today's Interest (1)</div>
<div class="CollapsiblePanelContent">
<table width="667px" class="tabularData">
<tr>
<td><a href="1st link">description </a></td>
<td><a href="2nd link">description </a></td>
<td><a href="3rd link">description </a></td>
<td><a href="4th link">description </a></td>
<td>no link in here</td>
</tr>
</table>
</div>
</div>
Измените ссылку на свойство классов данных на тип List<String>
data class MyScrapedData(
val userName: String,
val links: List<String>
)
Используйте elements
вместо element
, чтобы выбрать все соответствующие вхождения css -селектора, и вызовите eachAttr("href")
, чтобы извлечь значение всех соответствующих атрибутов href.
fun main() {
val githubUserData = skrape {
url = "http://www.website"
extract {
MyScrapedData(
userName = element("div.CollapsiblePanel").text(),
links = elements("table tr td a").eachAttr("href")
)
}
}
println("selected user: ${githubUserData.userName}")
println("selected links: ${githubUserData.links}")
// will print:
// selected user: Today's Interest (1)
// selected links: [1st link, 2nd link, 3rd link, 4th link]
}
СОВЕТ: Идентификатор артефакта изменен с core
на skrapeit-core
с версии 0.4.2 и выше. Я думаю, что по этой причине вы не смогли обновить версию. Таким образом, вы должны добавить зависимость skrape {it} следующим образом:
используя Gradle:
implementation("it.skrape:skrapeit-core:0.6.0")
// instead of implementation("it.skrape:core:0.4.1")
используя Maven:
<dependency>
<groupId>it.skrape</groupId>
<artifactId>skrapeit-core</artifactId>
<version>0.6.0</version>
</dependency>