网页数据抓取(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数码数码数码数码数码数码数码数字,我不在这里解释,只需提示,我们可以使用多线程到分页的所有当前数据都是采集,通过线程采集当前页数据,一个要转动页面操作,可以采集完成所有数据。
我们匹配数据可能在项目的实际开发中,要求我们制作存储的数据以用于提取的数据,以便我们将在下一个数据中执行数据。