我正在使用skrape {it}制作Kotlin网络抓取应用程序。
到目前为止,我已经设法获取了一些我需要的信息,但我无法获取其余信息,我需要从html表中获取href链接。见下文...
<div class="CollapsiblePanelTab" tabindex="0">Today's Interest (1)</div>
<div class="CollapsiblePanelContent">
<table width="667px" class="tabularData">
<tr>
<td width="407px" height="21"><a href="link info i need in here">description </a></td>
<td width="130px">15:28</td>
<td width="130px">Western</td>
</tr>
我可以获取可折叠面板选项卡的信息,但不能获取href,我无法弄清楚如何进入表格。
我是通过在库github页面上篡改示例代码来完成此操作的。
有人有什么想法吗?
我的代码
import it.skrape.selects.el
import it.skrape.skrape
data class MyScrapedData(
val userName: String
)
fun main() {
val githubUserData = skrape {
url = "http://www.website"
extract {
MyScrapedData(
userName = el("div.CollapsiblePanel").text()
)
}
}
println("${githubUserData.userName} is data selected ")
谢谢你的任何信息
查看语法,我假设您使用的是0.6.0版。您必须使用更特定的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
}
You can find more information about css selectors here: https://www.w3schools.com/cssref/css_selectors.asp
you could also give version 1.0.0-alpha5 a try. I know it's an alpha version, but it's fully working and you could do things even more elegant.
EDIT: If you want to extract multiple links you can do (using version 0.6.0) it like this:
assuming the HTML you want to parse has following structure:
<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>
Change your data classes property link to be of type List<String>
data class MyScrapedData(
val userName: String,
val links: List<String>
)
Use elements
instead of element
to select all matching occurences of the css-selector and call eachAttr("href")
to extract the value of all corresponding href attributes.
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]
}
提示:
工件标识已从0.4.2及更高版本更改core
为skrapeit-core
。我认为这就是您无法更新版本的原因。因此,您必须添加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>
感谢您的快速答复!我使用的是0.4.1(位于列表的顶部:/),我尝试获取alpha版本,但由于某种原因它无法下载。但是我确实得到了0.6.0。请问我要导入什么项目?我问,因为即使声明了var,attr和link =也会以红色突出显示。再次感谢!
检查一下,哈哈,我知道了,它已经丢失了,非常感谢!只是一个问题(请问我科伦坡)如果有超过1个href链接,我只需要将Link声明为列表并循环执行即可获得所有链接?
对不起,缺少逗号。只需直接在浏览器中键入代码示例,而无需突出显示语法:DI更新了答案以使用链接列表
那太好了。逗号没有问题哈哈,我明天看一下,让你知道我的生活。再次感谢!
@Christian,您好,谢谢您提供的建议,我已经从第一部分中获取了我所需的所有信息。我也看过CSS选择器,想知道一件事。在哪里可以找到有关为库中的每个bselector编写内容的信息?例如,如果我想获得某个“我”,选择器会说元素#id #firstname是id =“ firstname”,但这是行不通的...我尝试了其他方式编写它,但无济于事。任何想法/阅读/教学的链接都很棒