网页数据抓取(httpclient+jsou提取网页数据的分类汇总--httpclient)

优采云 发布时间: 2021-09-22 21:12

  网页数据抓取(httpclient+jsou提取网页数据的分类汇总--httpclient)

  说明链接

  在许多行业中,必须对行业数据进行分类以分析行业数据。对于公司未来的发展,有一个很好的参考和水平对比。因此,在实际工作中,我们可能必须遇到数据采集这个概念,数据采集的最终目标是获取数据,提取数据提取和数据分类摘要的有用数据。

  许多人在第一次学到了数据采集,我可能不会开始,特别是作为一个新手,但我觉得很尴尬,所以我会分享自己的经验,我希望与每个人共享技术。如果有任何缺点,请参阅您。写这个目的,我希望每个人都会成长,我也相信没有高低,只有互补,只有共享,可以让彼此变得更多。

  当我们在Web数据采集时,我们倾向于通过这些大步骤:

  1通过URL地址读取目标页面2获取Web源代码3提取我们必须通过Web源代码4提取的目标数据来格式化数据以获取所需的数据。

  这是一个原理图,我希望每个人都知道

  

  了解基本过程,下来,我意识到如何提取我们需要的数据,并提取数据提取可以用正则表达式提取,或者使用httpclient + jsoup提取,这里,不解释httpclient + jsou提取有关Web数据的信息,将在稍后的Httpclient + Jsou的特殊解释,此处开始解释如何用正则表达式提取数据。

  我在这里找到网站:我们必须在里面提取数据,我们必须提取的最终结果是模型,数量,报价,供应商,首先,我们看到这个网站全页预览

  

  接下来我们查看Web源结构:

  

  上述源代码可以清楚地清楚,我们将提取整个网页数据的整个Web数据。

  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

+ "]";

}

}

  好的,运行上面的程序,我们得到以下数据,即我们必须获得的最终数据

  

  获取数据成功,这就是我们必须得到最终的数据结果,最后我想说,这个页面相对简单,而Web源代码可以看到源数据,以这种方式是Get模式当提交数据时,当采集时,某些Web架构更复杂,并且可能在源代码中可能没有数据。关于这个解决方案,稍后介绍你。另外,我在采集这个页面,采集 @ @ @ @ @ @ @ @ @ @ @ k数码数码数码数码数码数码数码数字,我不在这里解释,只需提示,我们可以使用多线程到分页的所有当前数据都是采集,通过线程采集当前页数据,一个要转动页面操作,可以采集完成所有数据。

  我们匹配数据可能在项目的实际开发中,要求我们制作存储的数据以用于提取的数据,以便我们将在下一个数据中执行数据。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线