搜索
首页Javajava教程零基础写Java知乎爬虫之获取知乎编辑推荐内容(2)

网页可以通过meta标签的charset来设置网页编码,譬如:

<meta charset="utf-8" />

我们右击,查看页面源代码:

230.jpg

可以看到,知乎采用的是UTF-8编码。

在这里和大家解释一下查看页面源代码和审查元素的区别。

查看页面源代码是显示整个页面的所有代码,没有按照HTML的标签进行排版,相当于是直接查看源码,这种方式对于查看整个网页的信息,比如meta比较有用。

审查元素,或者有的浏览器叫查看元素,是针对你右击的元素进行查看,比如一个div或者img,比较适用于单独查看某个对象的属性和标签。

好的,我们现在知道了问题出在了编码上,接下来就是对抓取到的内容进行编码转换了。

在java中实现很简单,只需要在InputStreamReader里面指定编码方式就行:

// 初始化 BufferedReader输入流来读取URL的响应
   in = new BufferedReader(new InputStreamReader(
     connection.getInputStream(),"UTF-8"));

此时再运行程序,便会发现可以正常显示标题了:

231.jpg

好的!非常好!

但是现在才只有一个标题,我们需要的是所有的标题。

我们将正则稍加修改,把搜索到的结果存储到一个ArrayList里面:

import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.regex.*;
public class Main {
 static String SendGet(String url) {
  // 定义一个字符串用来存储网页内容
  String result = "";
  // 定义一个缓冲字符输入流
  BufferedReader in = null;
  try {
   // 将string转成url对象
   URL realUrl = new URL(url);
   // 初始化一个链接到那个url的连接
   URLConnection connection = realUrl.openConnection();
   // 开始实际的连接
   connection.connect();
   // 初始化 BufferedReader输入流来读取URL的响应
   in = new BufferedReader(new InputStreamReader(
     connection.getInputStream(), "UTF-8"));
   // 用来临时存储抓取到的每一行的数据
   String line;
   while ((line = in.readLine()) != null) {
    // 遍历抓取到的每一行并将其存储到result里面
    result += line;
   }
  } catch (Exception e) {
   System.out.println("发送GET请求出现异常!" + e);
   e.printStackTrace();
  }
  // 使用finally来关闭输入流
  finally {
   try {
    if (in != null) {
     in.close();
    }
   } catch (Exception e2) {
    e2.printStackTrace();
   }
  }
  return result;
 }
 static ArrayList<String> RegexString(String targetStr, String patternStr) {
  // 预定义一个ArrayList来存储结果
  ArrayList<String> results = new ArrayList<String>();
  // 定义一个样式模板,此中使用正则表达式,括号中是要抓的内容
  Pattern pattern = Pattern.compile(patternStr);
  // 定义一个matcher用来做匹配
  Matcher matcher = pattern.matcher(targetStr);
  // 如果找到了
  boolean isFind = matcher.find();
  // 使用循环将句子里所有的kelvin找出并替换再将内容加到sb里
  while (isFind) {
   //添加成功匹配的结果
   results.add(matcher.group(1));
   // 继续查找下一个匹配对象
   isFind = matcher.find();
  }
  return results;
 }
 public static void main(String[] args) {
  // 定义即将访问的链接
  String url = "http://www.zhihu.com/explore/recommendations";
  // 访问链接并获取页面内容
  String result = SendGet(url);
  // 使用正则匹配图片的src内容
  ArrayList<String> imgSrc = RegexString(result, "question_link.+?>(.+?)<");
  // 打印结果
  System.out.println(imgSrc);
 }
}

这样就能匹配到所有的结果了(因为直接打印了ArrayList所以会有一些中括号和逗号):
232.jpg

OK,这样就算是完成了知乎爬虫的第一步。

但是我们可以看出来,用这样的方式是没有办法抓到所有的问题和回答的。

我们需要设计一个Zhihu封装类,来存储所有抓取到的对象。



 以上就是零基础写Java知乎爬虫之获取知乎编辑推荐内容(2) 的内容,更多相关内容请关注PHP中文网(www.php.cn)!


声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)