使用 Jsoup 抓取网页时转到下一页
Going to next page when web scraping with Jsoup
我正在尝试使用 Jsoup 抓取这个 https://www.actksa.com/ar/training-courses/training-in/Jeddah,我编写的代码只包含第一页上的主题。
try {
String url = "https://www.actksa.com/ar/training-courses/training-in/Jeddah";
Document doc = Jsoup.connect(url).get();
Elements data = doc.select("tr");
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("td.wp-60")
.eq(i)
.text();
String detailUrl = data.select("td.wp-60")
.select("a")
.eq(i)
.attr("href");
parseItems.add(new ParseItem(title, detailUrl));
Log.d("items"," . title: " + title);
如何继续从下一页中抓取主题?
我注意到我可以使用分页,但我不确定如何使用。其次,link 在转到下一页时略有变化,因此我可能会使用它。转到下一页并继续抓取标题的代码是什么?
该站点的分页似乎由 ?page=<int>
查询参数控制。
只需将您现有的代码包装在一个 for
循环中即可控制当前页面。
int numPages = 5; // the number of pages to scrape
for (int i = 0; i < numPages; i++) {
String url = "https://www.actksa.com/ar/training-courses/training-in/Jeddah?page=" + i;
Document doc = Jsoup.connect(url).get();
Elements data = doc.select("tr");
int size = data.size();
Log.d("doc", "doc: "+doc);
Log.d("data", "data: "+data);
Log.d("size", ""+size);
for (int j = 0; j < size; j++) {
String title = data.select("td.wp-60")
.eq(j)
.text();
String detailUrl = data.select("td.wp-60")
.select("a")
.eq(j)
.attr("href");
parseItems.add(new ParseItem(title, detailUrl));
Log.d("items"," . title: " + title);
}
}
如果您想在不对数字进行硬编码的情况下获取所有页面,请将递增放在一个 while 循环中,该循环会在页面上的 table 没有内容时中断。例如 https://www.actksa.com/ar/training-courses/training-in/jeddah?page=6
不是一个有效的页面,只显示一个空 table.
的页面
我正在尝试使用 Jsoup 抓取这个 https://www.actksa.com/ar/training-courses/training-in/Jeddah,我编写的代码只包含第一页上的主题。
try {
String url = "https://www.actksa.com/ar/training-courses/training-in/Jeddah";
Document doc = Jsoup.connect(url).get();
Elements data = doc.select("tr");
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("td.wp-60")
.eq(i)
.text();
String detailUrl = data.select("td.wp-60")
.select("a")
.eq(i)
.attr("href");
parseItems.add(new ParseItem(title, detailUrl));
Log.d("items"," . title: " + title);
如何继续从下一页中抓取主题? 我注意到我可以使用分页,但我不确定如何使用。其次,link 在转到下一页时略有变化,因此我可能会使用它。转到下一页并继续抓取标题的代码是什么?
该站点的分页似乎由 ?page=<int>
查询参数控制。
只需将您现有的代码包装在一个 for
循环中即可控制当前页面。
int numPages = 5; // the number of pages to scrape
for (int i = 0; i < numPages; i++) {
String url = "https://www.actksa.com/ar/training-courses/training-in/Jeddah?page=" + i;
Document doc = Jsoup.connect(url).get();
Elements data = doc.select("tr");
int size = data.size();
Log.d("doc", "doc: "+doc);
Log.d("data", "data: "+data);
Log.d("size", ""+size);
for (int j = 0; j < size; j++) {
String title = data.select("td.wp-60")
.eq(j)
.text();
String detailUrl = data.select("td.wp-60")
.select("a")
.eq(j)
.attr("href");
parseItems.add(new ParseItem(title, detailUrl));
Log.d("items"," . title: " + title);
}
}
如果您想在不对数字进行硬编码的情况下获取所有页面,请将递增放在一个 while 循环中,该循环会在页面上的 table 没有内容时中断。例如 https://www.actksa.com/ar/training-courses/training-in/jeddah?page=6
不是一个有效的页面,只显示一个空 table.