网页视频抓取工具 知乎(知乎上看到一个问题能利用爬虫技术做到哪些很有用的事情? )
优采云 发布时间: 2022-03-07 07:09网页视频抓取工具 知乎(知乎上看到一个问题能利用爬虫技术做到哪些很有用的事情?
)
在 知乎 上看到一个问题,爬虫技术可以做哪些酷、有趣和有用的事情?我觉得它很有趣,所以我去学习正则表达式。听说正则表达式很有用。学习后,我认为这是一个非常有用的工具。问题和评论基本上都是用python写的爬虫。看了原理,感觉爬一个简单的静态网页还是挺容易的。就是获取网站html源码,然后解析需要的字段,最后得到字段处理(下载)。记得以前学java的时候有一个URL类好像有这个功能,于是翻了一下api文档,发现URLConnection确实可以得到html源码。
先从核心写,获取网页源代码
package mothed;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
/**
* 爬取网页源代码
* @author ganhang
*
*/
public class Spider {
public static String GetContent(String url) {
// 定义一个字符串用来存储网页内容
String result = "";
BufferedReader in = null;
try {
URL realUrl = new URL(url);
// 初始化链接
URLConnection connection = realUrl.openConnection();
// BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
// 用来临时存储抓取到的每一行的数据
String line;
while ((line = in.readLine()) != null) {
// 遍历抓取到的每一行并将其存储到result里面
System.out.println(line);
result += line;
}
} catch (Exception e) {
System.out.println("GetContent出现异常!" + e);
e.printStackTrace();
}
// 使用finally来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
}
然后解析得到的Content,得到答案中想要的字段、标题、图片链接
<p>package bean;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import mothed.Spider;
/**
* 知乎图片bean
* @author ganhang
*
*/
public class ZhiHuBean {
public String zhihuUrl;// 网页链接
public String question;// 问题名;
public ArrayList zhihuPicUrl;// 图片链接
public String getQuestion() {
return question;
}
public void setQuestion(String question) {
this.question = question;
}
public ArrayList getZhihuPicUrl() {
return zhihuPicUrl;
}
public void setZhihuPicUrl(ArrayList zhihuPicUrl) {
this.zhihuPicUrl = zhihuPicUrl;
}
// 构造方法初始化数据
public ZhiHuBean(String url) throws Exception {
zhihuUrl = url;
zhihuPicUrl = new ArrayList();
// 判断url是否合法
if (isZhuHuUrl(url)) {
url=getRealUrl(url);
System.out.println("正在抓取知乎链接:" + url);
// 根据url获取该问答的细节
String content = Spider.GetContent(url);
//System.out.println("content:"+content);
Matcher m;
// 匹配标题
m = Pattern.compile("zh-question-title.+?(.+?)").matcher(content);
if (m.find()) {
question = m.group(1);
}
// 匹配答案图片链接
m = Pattern.compile("