实时抓取网页数据(httpclient+jsoup提取网页数据的分类汇总,值得收藏!)
优采云 发布时间: 2021-09-23 08:14实时抓取网页数据(httpclient+jsoup提取网页数据的分类汇总,值得收藏!)
在许多行业中,必须行业的数据进行分类,分析行业数据。对于公司未来的发展,有一个很好的参考和横向对比。因此,在实际工作中,我们可能会遇到数据采集这个概念,数据采集的最终目标是获取数据,提取数据提取和数据分类汇总有用的数据。
很多人都在第一时间我学到的数据采集,我可能无法启动,特别是作为一个新手,但我觉得很别扭,所以我将分享我自己的经验,我希望能够分享技术与每一个人。如果有任何不足之处,请参考你。写这个目的,我希望每个人都会成长,我也相信,没有高低,只有互补,仅共享,可以使对方变得更加。
当我们在Web数据采集,我们倾向于穿过这些大步骤:
1通过URL地址2获得幅材源代码3提取物,我们有通过网络的源代码4以提取对数据进行格式化,以获得我们所需要的数据的目标数据中读取目标页面。
这是一个*敏*感*词*,我希望每个人都知道
了解基本的过程,下来,我知道如何提取我们需要的情况下的数据,并提取数据提取可以用正则表达式中提取,或使用的HttpClient + JSOUP中提取,在这里,不解释HttpClient的+ JSou提取有关网络数据信息,将使了HTTPClient + JSou的专项说明后,在这里,开始讲解如何使用正则表达式提取数据。
我在这里找到了网站:我们要提取里面的数据,最终的结果,我们不得不提的是型号,数量,报价,供应商,首先我们看到的这款网站整个页预览
接下来,我们看一下在网络源结构:
上面的源代码可以清楚明确,我们将提取整个网络数据为整个网页数据。
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HTMLPageParser {
public static void main(String[] args) throws Exception {
//目的网页URL地址
getURLInfo("http://www.ic.net.cn/userSite/publicQuote/quotes_list.php","utf-8");
}
public static List getURLInfo(String urlInfo,String charset) throws Exception {
//读取目的网页URL地址,获取网页源码
URL url = new URL(urlInfo);
HttpURLConnection httpUrl = (HttpURLConnection)url.openConnection();
InputStream is = httpUrl.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8"));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
//这里是对链接进行处理
line = line.replaceAll("]*>", "");
//这里是对样式进行处理
line = line.replaceAll("]*>", "");
sb.append(line);
}
is.close();
br.close();
//获得网页源码
return getDataStructure(sb.toString().trim());
}
static Pattern proInfo
= Pattern.compile("(.*?)\\s*(.*?)\\s*(.*?)\\s*(.*?)\\s*(.*?)", Pattern.DOTALL);
private static List getDataStructure(String str) {
//运用正则表达式对获取的网页源码进行数据匹配,提取我们所要的数据,在以后的过程中,我们可以采用httpclient+jsoup,
//现在暂时运用正则表达式对数据进行抽取提取
String[] info = str.split("");
List list = new ArrayList();
for (String s : info) {
Matcher m = proInfo.matcher(s);
Product p = null;
if (m.find()) {
p = new Product();
//设置产品型号
String[] ss = m.group(1).trim().replace(" ", "").split(">");
p.setProStyle(ss[1]);
//设置产品数量
p.setProAmount(m.group(2).trim().replace(" ", ""));
//设置产品报价
p.setProPrice(m.group(4).trim().replace(" ", ""));
//设置产品供应商
p.setProSupplier(m.group(5).trim().replace(" ", ""));
list.add(p);
}
}
//这里对集合里面不是我们要提取的数据进行移除
list.remove(0);
for (int i = 0; i < list.size(); i++) {
System.out.println("产品型号:"+list.get(i).getProStyle()+",产品数量:"+list.get(i).getProAmount()
+",产品报价:"+list.get(i).getProPrice()+",产品供应商:"+list.get(i).getProSupplier());
}
return list;
}
}
class Product {
private String proStyle;//产品型号
private String proAmount;//产品数量
private String proPrice;//产品报价
private String proSupplier;//产品供应商
public String getProStyle() {
return proStyle;
}
public void setProStyle(String proStyle) {
this.proStyle = proStyle;
}
public String getProSupplier() {
return proSupplier;
}
public void setProSupplier(String proSupplier) {
this.proSupplier = proSupplier;
}
public String getProAmount() {
return proAmount;
}
public void setProAmount(String proAmount) {
this.proAmount = proAmount;
}
public String getProPrice() {
return proPrice;
}
public void setProPrice(String proPrice) {
this.proPrice = proPrice;
}
public Product() {
}
@Override
public String toString() {
return "Product [proAmount=" + proAmount + ", proPrice=" + proPrice
+ ", proStyle=" + proStyle + ", proSupplier=" + proSupplier
+ "]";
}
}
确定,运行上述程序,我们得到以下数据,即,我们有最终数据以获得
获取数据的成功,这就是我们要得到最终的数据结果,最后我想说,这个页面比较简单,和网络源代码,可以看到源的数据,这种方式是GET模式当数据被提交,当采集,一些网络结构比较复杂,并且可能没有数据,我们必须在源代码中提取。关于此解决方案,稍后为您介绍。另外,我在采集这个页面,只需采集@@ķ数据数据的数据数据,这一点,我不解释在这里,只是提示,我们可以使用多线程到所有当前的数据分页采集,通过线程一个采集当前页面的数据,一个翻页动作,你可以采集完成所有的数据。
我们匹配的数据可能会在项目的实际开发中,需要我们做存储所提取的*敏*感*词*,以便我们将在接下来的数据进行数据。