import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Main {
private static String num;
private static FileWriter fw;
public static void main(String[] args) throws IOException {
List<Article> articleList = new ArrayList<>();
fw = new FileWriter("output.txt");
for (Integer i = new Integer(1);; i++)
{
System.out.println("Parsing page number " + i.toString() + ".");
Document doc = Jsoup.connect("https://auto.ria.com/car/used/?page=" + i.toString()).get();
Elements h1Elements = doc.getElementsByAttributeValue("class", "item ticket-title");
if (h1Elements.isEmpty())
break;
h1Elements.forEach(h1Element -> {
Element aElement = h1Element.child(1);
String url = aElement.attr("href");
String title = aElement.attr("title");
Document carPage = new Document("");
try {
carPage = Jsoup.connect(url).get();
} catch (IOException e) {
System.out.println("Can not connect to " + url + ".");
e.printStackTrace();
}
String price = "";
price = carPage.getElementsByAttributeValue("class", "price-seller").first().child(0).text();
List<String> desc = new ArrayList<>();
carPage.getElementById("description").child(0).getElementsByTag("dd").forEach(dd -> {
if (dd.hasAttr("data-hide")) {
desc.add(dd.getElementsByAttributeValue("class", "argument").first().child(0).text());
} else {
desc.add(dd.text());
}
});;
Elements numElems = carPage.getElementsByAttributeValue("class", "phone");
if (!numElems.isEmpty())
{
num = numElems.first().child(0).child(1).text();
numElems.forEach(numElem -> {
if (!num.equals(numElem.child(0).child(1).text()))
num += ", " + numElem.child(0).child(1).text();
});
System.out.println("URL: " + url + ",\nTitle: " + title + ",\nPrice: " + price + ",");
desc.forEach(str -> {
System.out.println(str);
});
System.out.println("");
articleList.add(new Article(url, title, price, desc, num));
}
});
if (i % 10 == 0) {
articleList.forEach(carInfo -> {
try {
fw.write(carInfo.getUrl() + "\n");
fw.write(carInfo.getName() + "\n");
fw.write(carInfo.getPrice() + "\n");
carInfo.getDescription().forEach(str -> {
try {
fw.write(str + "\n");
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
});
fw.write(carInfo.getNumber() + "\n\n");
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
});
articleList.clear();
}
}
try {
fw.close();
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
// TODO Saving articleList to word, excel, SQL
}
}
class Article {
private String url;
private String name;
private String price;
private List<String> description;
private String number;
public Article(String url, String name, String price, List<String> description, String number) {
this.url = url;
this.name = name;
this.price = price;
this.description = description;
this.number = number;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public List<String> getDescription() {
return description;
}
public void setDescription(List<String> description) {
this.description = description;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
По-разному бывает, но последний раз дошел до 1086-й страницы и остановился. Просто terminated. Запускался из Eclipse, возможно, это какие-то его ограничения, поэтому сейчас пробую вне эклипса парсить, но это займет немало времени. Может, все таки мой косяк, кто знает?
P.S. В Java я нуб, это мой первый проект.