我尝试使用Jsoup来创建一个爬虫程序......
链接:https://en.wikipedia.org/wiki/Wolfenstein_3D
标题:Wolfenstein 3D
图片:https://en.wikipedia.org/wiki/Wolfenstein_3D#/media/File:Wolfenstein-3d.jpg
- 醇>
链接:http://www.huffingtonpost.com/2012/01/02/ron-pippin_n_1180149.html
标题:罗恩皮平的神话档案包含一切历史(照片)
图片:http://i.huffpost.com/gen/453302/PIPPIN.jpg
(请原谅URL中的空格。显然我不希望抓取工具添加空格并分解URL ...堆栈溢出只是不允许我在这个问题中发布更多链接)
到目前为止,我已经使用此代码让jsoup在第一步工作(从初始URL中拉出链接):
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class mycrawler {
public static void main(String[] args) {
Document doc;
try {
doc = Jsoup.connect("https://docs.google.com/spreadsheets/d/1CE9HTe2rdgPsxMHj-PxoKRGX_YEOCRjBTIOVtLa_2iI/pubhtml").get();
Elements links = doc.select("a[href]");
for (Element link : links) {
System.out.println(link.text());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
我现在无法弄清楚如何创建爬虫的第二个方面,它在每个链接中循环(可能是可变数量的链接),并从每个链接中找到标题和主要图像。
答案 0 :(得分:1)
public static void main(String[] args) {
Document doc;
String url = "https://docs.google.com/spreadsheets/d/1CE9HTe2rdgPsxMHj-PxoKRGX_YEOCRjBTIOVtLa_2iI/pubhtml";
try {
doc = Jsoup.connect(url).get();
Elements links = doc.select("a[href]");
for (Element link : links) {
String innerurl = link.text();
if (!innerurl.contains("://")) {
continue;
}
System.out.println("*******");
System.out.println(innerurl);
Document innerDoc = Jsoup.connect(innerurl).get();
Elements headerLinks = innerDoc.select("h1");
for (Element innerLink : headerLinks) {
System.out.println("Headline : " + innerLink.text());
}
Elements imgLinks = innerDoc.select("img[src]");
for (Element innerLink : imgLinks) {
String innerImgSrc = innerLink.attr("src");
if(innerurl.contains("huffingtonpost") && innerImgSrc.contains("i.huffpost.com/gen")){
System.out.println("Image : " + innerImgSrc);
}
if(innerurl.contains("wikipedia")) {
Pattern pattern = Pattern.compile("(jpg)$", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(innerImgSrc);
if(matcher.find()){
System.out.println("Image : " + innerImgSrc);
break;
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
Output
*******
https://en.wikipedia.org/wiki/Wolfenstein_3D
Headline : Wolfenstein 3D
Image : //upload.wikimedia.org/wikipedia/en/0/05/Wolfenstein-3d.jpg
*******
http://www.huffingtonpost.com/2012/01/02/ron-pippin_n_1180149.html
Headline : Ron Pippin's Mythical Archives Contain History Of Everything (PHOTOS)
Image : http://i.huffpost.com/gen/453302/PIPPIN.jpg
Image : http://i.huffpost.com/gen/453304/PIPSHIP.jpg
答案 1 :(得分:0)
我认为您应该使用href
而不是link.attr("href")
获取链接的link.text()
属性。 (在页面中显示的文本和底层href不同)跟踪列表的所有链接并在第二步中迭代该列表以获取相应的Document
,您可以从中提取标题和图像URL。
对于维基页面,我们可以使用Jsoup
提取标题,如下所示
Element heading = document.select("#firstHeading").first();
System.out.println("Heading : " + heading.text());