Java爬虫之爬取多篇含有关键词的文章标题和内容
实现的功能
该代码针对维科网写的爬虫,具体如果想写其它的可以照着这篇模仿来写!

输入想要搜索的关键字和输入关键字后的前几页页数(即输入关键字后跳转的网页的页数,如下图)

将包含关键字的文章标题和内容提取出来保存在一个txt文件里面(如下图,输入关键词为智能,前2页)


需要用到的jar包
获取文章信息需要的包:Jsoup;
可以到https://jsoup.org/download下载,如果就想着爬虫,选择第一个就够了。

需要对html一些标签有一定的了解
可以到w3cschool了解html相关知识;
打开维科闻网站输入关键词后,按F12开发者工具,或者右键点击查看源,就可以看到网页的源代码。
代码设计思想
有心者应该知道我用python写过这个爬虫(python爬虫之爬取多篇含有关键词的文章标题和内容),两者有着异曲同工之妙。
1.每个网页通过Jsoup.connect(url).get请求获得网页源代码,再通过getElementsByClass()或者select()等来对源代码进行提取信息;
2.先观察每次输入关键字之后网址的变化,如我输入高新,可以发现关键字在keywords=里面,那这样可以用input后,将关键字字符串和前面的网址连接起来。


3.观察每一页的网址变化,如第三页,可以发现页数是存在pagenum=里面的(第一页可能忽略了,你可以尝试的输入http://www.ofweek.com/newquery.action?keywords=高新&pagenum=1,发现会跳转第一页),这样就可以将页数和前面2拼接后的网址再拼接起来。

4.接下来就是看搜索关键词后网页的源代码(F12),可以发现每个文章都是在类名为zx-tl的div块标签里面,就可以通过select(“div.zx-tl”)提取出里面的文章的标题和链接,也可以用getElementsByClass(“zx-tl”);

5.再将每页文章的链接访问一遍,提取出文章的内容,而再次打开每篇文章的链接,发现文章的内容都是在类名为artical-content的div块里面,通过select(“div.artical-content”)把文章的内容提取出来,也可以用getElementsByClass(“artical-content”)提取。

6.把文章的内容和标题写入txt文件。
源代码
package test;
import java.io.*;
import java.util.Scanner;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.util.Vector;
public class Test{
public static Vector<String> titles=new Vector<String>();//存放文章标题
public static Vector<String> t_contents=new Vector<String>();//存放文章内容
public static void getTitleAndUrl(String url) {
try {
Vector<String> t_urls=new Vector<String>();
Document doc = Jsoup.connect(url).get();
Elements links=doc.getElementsByClass("zx-tl");//由于每篇文章标题都是在类名为zx-tl的div块里面,Java可以直接用getElementsByClass,当然这里也可以用select来写,select("div.zx-tl")
Elements urls=links.select("a");//再缩短,标题和链接都在a标签里面
for (Element link : urls){
t_urls.add(link.attr("href"));//将每篇文章链接加入t_urls
titles.add(link.text());//将每篇文章标题加入titles
}
for(String t_url:t_urls) {
Document doc2=Jsoup.connect(t_url).get();
Elements contents=doc2.getElementsByClass("artical-content");
t_contents.add(contents.text());
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String arg[]) {
try {
Scanner input=new Scanner(System.in);
System.out.println("输入在维科网搜索的关键词:");
String keyword=input.next();
System.out.println("输入想要查找的前几页(如果输入2,即找前2页的):");
String pagenumber=input.next();
String txt_name="关键词:"+keyword+"前"+pagenumber+"页具体内容.txt";
File file=new File(txt_name);
int pagenum=Integer.parseInt(pagenumber);
for(int i=1;i<=pagenum;i++) {
String page=Integer.toString(i);
String url="http://www.ofweek.com/newquery.action?keywords="+keyword+"&type=1&pagenum="+page;
getTitleAndUrl(url);
}
if(!file.exists()){
file.createNewFile();
}
FileWriter fileWriter = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fileWriter);
for(int i=0;i<titles.size();i++) {
bw.write(titles.get(i));
bw.write("\n");
bw.write(t_contents.get(i));
bw.write("\n\n");
}
bw.close();
System.out.println("txt文件已经成功记录!");
}
catch(IOException e) {
e.printStackTrace();
}
}
}

本文介绍了一款使用Java编写的爬虫,它能从维科网上抓取含有特定关键词的文章标题和内容。通过理解HTML标签,利用Jsoup库连接网页并解析,根据网页URL的变化规律获取多页内容。最终,爬取的数据被保存到TXT文件中。

1451

被折叠的 条评论
为什么被折叠?



