如何解决从互联网获取数据
我正在尝试从以下页面中获取数据:Page我要尝试的是,如果用户在EditText中键入某些内容并按下按钮,则RecyclerView包含所有内容的数组搜索被加载。缺点是我不能很好地解析页面数据。例如,在搜索时,仅使URL平整的单词变为:Page。如您所见,我无法显示标题或图像:
这是搜索时(我简化了)页面body
的代码:
<body>
<div id="app" class="pb-5">
<main role="main" class="container-fluid">
<div class="row">
<div class="col-12 col-lg-8 col-xl-9">
<div class="row">
<div class="element col-6 col-sm-6 col-md-4 col-lg-3 col-xl-2 mt-2 " data-identifier="41512">
<a href=" https://lectortmo.com/library/manhwa/41512/solo-leveling"> <div class="thumbnail book book-thumbnail-41512">
<style>
.book-thumbnail-41512::before{
background-image: url('https://otakuteca.com/images/books/cover/5c2efcd42cd5e.jpg');
}
</style>
<div class="thumbnail-title">
<h4 class="text-truncate" title="Solo Leveling">Solo Leveling</h4>
</div>
</div>
</a> </div> <div class="element col-6 col-sm-6 col-md-4 col-lg-3 col-xl-2 mt-2 " data-identifier="48448">
<a href=" https://lectortmo.com/library/manhwa/48448/love-leveling"> <div class="thumbnail book book-thumbnail-48448">
<style>
.book-thumbnail-48448::before{
background-image: url('https://otakuteca.com/images/books/cover/5ed182d1c909d.jpg');
}
</style>
<div class="thumbnail-title">
<h4 class="text-truncate" title="Love Leveling ">Love Leveling </h4>
</div>
</div>
</a> </div> </div>
</div>
</div>
</main>
</div>
</body>
这就是我解析数据的方式:
@Override
protected ArrayList<ParseItem> doInBackground(Void... voids) {
String texto = textoBusqueda.getText().toString();
String arreglo = texto.replace(' ','+');
String url = "https://lectortmo.com/library?_page=1&title=" + arreglo;
try {
Document doc = Jsoup.connect(url).get();
Elements data = doc.select("div.row");
int size = data.size();
Log.d("doc","doc: "+doc);
Log.d("data","data: "+data);
Log.d("size",""+size);
for (int i = 0; i < size; i++) {
String title = data.select("div.thumbnail-title")
.select("h4")
.eq(i)
.attr("tittle"); //nombre del manhwa
String imgUrl = data.select("style")
.select("background-image")
.eq(i)
.attr("url"); //imagen del manga
String detailUrl = data.select("div.row")
.select("a")
.eq(i)
.attr("href");
String urlManga = data.select("div.row")
.select("a")
.eq(i)
.attr("href");
parseItems.add(new ParseItem(imgUrl,title,detailUrl,urlManga));
}
} catch (IOException e) {
e.printStackTrace();
}
return parseItems;
}
有人可以告诉我我该怎么做吗?谢谢
解决方法
- 您的第一个
select
返回7个元素,但是应该只有两个,因此让我们从调整选择器开始,使用:Elements data = doc.select("div.row>.element");
现在size
是2
。 - 另一件事是您不必使用:
for (int i = 0; i < size; i++)
,但让我们使用for (Element e : data)
,这样您就不必再使用.eq(i)
了,只需使用e
。 - 您有错字,应该是
"title"
,而不是"tittle"
。 - 现在您可以使用更简单的选择器获取详细的URL:
String detailUrl = e.select("a").attr("href");
- 我不明白您想像
urlManga
那样得到什么,因为他们每个人只有一个链接。 - 获取
imgUrl
很困难,因为URL位于<style>
中,并且Jsoup无法解析其中的内容,因此您必须使用正则表达式来获取URL或仅进行一些创造性的字符串拆分。
所有建议后,您的代码应如下所示:
Document doc = Jsoup.connect(url).get();
Elements data = doc.select("div.row>.element");
int size = data.size();
Log.d("doc","doc: "+doc);
Log.d("data","data: "+data);
Log.d("size",""+size);
for (Element e : data) {
String title = e.select("h4").attr("title"); // nombre del manhwa
String imgUrl = e.select("style").first().html().split("url\\('")[1].split("'\\)")[0]; // imagen del manga
String detailUrl = e.select("a").attr("href").trim();
String urlManga = "???";
parseItems.add(new ParseItem(imgUrl,title,detailUrl,urlManga));
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。