请问java怎么实现爬取网页信息?

yyxgs 2018-11-30 05:24:39


比如说,我搜索“C语言怎么实现面向对象编程”,会出来很多信息,假设我想看前10页的信息
请问除了用浏览器点击下一页,一直到第10页,用java怎么写程序把这10页的信息都爬取下来保存到文件里呢?
请问java能不能实现,如果可以,需要学习哪些知识呢,请大神指教。
...全文
648 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyxgs 2018-12-01
  • 打赏
  • 举报
回复
封装了一下,输入网址,爬取该页面网页链接,代码如下:
class Temp {
public Temp() {
}

/**
* 获取标题
*/
public static StringBuffer getTitle(StringBuffer linkStr) throws Exception {
StringBuffer str = null;

Document document = Jsoup.connect(linkStr.toString()).get();
str = Conver.nsb(document.title());

return str;
}

/**
* 获取网页信息
*/
public static ArrayList<ArrayList<StringBuffer>> getTextAndLink(StringBuffer linkStr) throws Exception {
ArrayList<ArrayList<StringBuffer>> textAndLink = new ArrayList<ArrayList<StringBuffer>>();
textAndLink.add(new ArrayList<StringBuffer>());
textAndLink.add(new ArrayList<StringBuffer>());

Document document = Jsoup.connect(linkStr.toString()).get();
Elements links = document.select("a[href]");

for (Element link : links) {
textAndLink.get(0).add(Conver.nsb(link.text()));
textAndLink.get(1).add(Conver.nsb(link.attr("href")));
}

return textAndLink;
}

/**
* 获取html
*/
public static StringBuffer getHtml(StringBuffer linkStr) throws Exception {
StringBuffer str = null;

Document document = Jsoup.connect(linkStr.toString()).get();
str = Conver.nsb(document.html());

return str;
}
}

	public static void main(String[] args) throws Exception {
System.out.print("输入网址: ");
StringBuffer link = Input.nextLine();

ArrayList<ArrayList<StringBuffer>> data = Temp.getTextAndLink(link);

System.out.println();
for (int i = 0;i < data.get(0).size();++i) {
System.out.println(data.get(0).get(i) + " ---> " + data.get(1).get(i));
}
}


发现了一个自己不懂的bug,例如:输入https://www.qq.com


可以看到很正常的爬取了腾讯首页的数据。

但是换成百度贴吧“C语言”网址:http://tieba.baidu.com/f?ie=utf-8&kw=C%E8%AF%AD%E8%A8%80&fr=search&red_tag=k2257155666


这时,根本就爬取不到C语言吧首页的数据,例如某些用户发的帖子
yyxgs 2018-11-30
  • 打赏
  • 举报
回复
知道怎么弄了,代码如下:
	public static void main(String[] args) throws Exception {
String link = "https://www.baidu.com/s?wd=C%E8%AF%AD%E8%A8%80%E6%80%8E%E4%B9%88%E7%BC%96%E5%86%99%E9%9A%8F%E6%9C%BA%E6%95%B0&rsv_spt=1&rsv_iqid=0xbc83951500008d80&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=16&rsv_sug1=15&rsv_sug7=100&rsv_t=7649UHhrgN4vYkpzTa3Kx0XaSHMYWDMquHmKNVrk4CFQoDAcC0IUMtwZHMhVF%2FPZvsC7&rsv_sug2=0&inputT=8027&rsv_sug4=8850";
String path = "c:/下载/test.txt";

Document document = Jsoup.connect(link).get();
Elements links = document.select("a[href]");

String str = "";
for (Element cycle : links) {
str = cycle.text();
str += "\r\n";
str += cycle.attr("href");

WriteStr.write(path, str, "UTF8");
WriteStr.write(path, "\r\n", "UTF8");
WriteStr.write(path, "\r\n", "UTF8");
}
}


打开文件,如图:


/s?wd=C%E8%AF%AD%E8%A8%80%E6%80%8E%E4%B9%88%E7%BC%96%E5%86%99%E9%9A%8F%E6%9C%BA%E6%95%B0&pn=90&oq=C%E8%AF%AD%E8%A8%80%E6%80%8E%E4%B9%88%E7%BC%96%E5%86%99%E9%9A%8F%E6%9C%BA%E6%95%B0&tn=baiduhome_pg&ie=utf-8&rsv_idx=2&rsv_pq=b504b63a0000d120&rsv_t=37e4Gdl%2B%2BrmfA5wO8VuFn95w4wxdLDKx3Y7Yu4347f6p6HUauWxXrpFBkerzvWLhgsTd

加上https://www.baidu.com:
https://www.baidu.com/s?wd=C%E8%AF%AD%E8%A8%80%E6%80%8E%E4%B9%88%E7%BC%96%E5%86%99%E9%9A%8F%E6%9C%BA%E6%95%B0&pn=90&oq=C%E8%AF%AD%E8%A8%80%E6%80%8E%E4%B9%88%E7%BC%96%E5%86%99%E9%9A%8F%E6%9C%BA%E6%95%B0&tn=baiduhome_pg&ie=utf-8&rsv_idx=2&rsv_pq=b504b63a0000d120&rsv_t=37e4Gdl%2B%2BrmfA5wO8VuFn95w4wxdLDKx3Y7Yu4347f6p6HUauWxXrpFBkerzvWLhgsTd

复制到浏览器:


第10页,完美。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧