java实现爬取指定网站的数据
- 格式:docx
- 大小:25.60 KB
- 文档页数:7
java⽹页数据抓取在很多⾏业中,要对⾏业数据进⾏分类汇总,及时分析⾏业数据,对于公司未来的发展,有很好的参照和横向对⽐。
所以,在实际⼯作,我们可能要遇到数据采集这个概念,数据采集的最终⽬的就是要获得数据,提取有⽤的数据进⾏数据提取和数据分类汇总。
很多⼈在第⼀次了解数据采集的时候,可能⽆从下⼿,尤其是作为⼀个新⼿,更是感觉很是茫然,所以,在这⾥分享⼀下⾃⼰的⼼得,希望和⼤家⼀起分享技术,如果有什么不⾜,还请⼤家指正。
写出这篇⽬的,就是希望⼤家⼀起成长,我也相信技术之间没有⾼低,只有互补,只有分享,才能使彼此更加成长。
在⽹页数据采集的时候,我们往往要经过这⼏个⼤的步骤:①通过URL地址读取⽬标⽹页②获得⽹页源码③通过⽹页源码抽取我们要提取的⽬的数据④对数据进⾏格式转换,获得我们需要的数据。
这是⼀个⽰意图,希望⼤家了解了解了基本流程,下来,我以⼀个案例具体实现如何提取我们需要的数据,对于数据提取可以⽤正则表达式进⾏提取,也可以⽤httpclient+jsoup进⾏提取,此处,暂且不讲解httpclient+jsou提取⽹页数据的做法,以后会对httpclient+jsoup进⾏专门的讲解,此处,先开始讲解如何⽤正则表达式对数据进⾏提取。
其次我们看⽹页源码结构:上⾯源码可以很清楚的可以看到整个⽹页源码结构,下来我们就对整个⽹页数据进⾏提取import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import .HttpURLConnection;import .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("/userSite/publicQuote/quotes_list.php","utf-8");}public static List<Product> 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("</?a[^>]*>", "");//这⾥是对样式进⾏处理line = line.replaceAll("<(\\w+)[^>]*>", "<$1>");sb.append(line);}is.close();br.close();//获得⽹页源码return getDataStructure(sb.toString().trim());}static Pattern proInfo= pile("<div>(.*?)</div>\\s*<div>(.*?)</div>\\s*<div>(.*?)</div>\\s*<div>(.*?)</div>\\s*<div>(.*?)</div>", Pattern.DOTALL);private static List<Product> getDataStructure(String str) {//运⽤正则表达式对获取的⽹页源码进⾏数据匹配,提取我们所要的数据,在以后的过程中,我们可以采⽤httpclient+jsoup,//现在暂时运⽤正则表达式对数据进⾏抽取提取String[] info = str.split("</li>");List<Product> list = new ArrayList<Product>();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() {}@Overridepublic String toString() {return "Product [proAmount=" + proAmount + ", proPrice=" + proPrice+ ", proStyle=" + proStyle + ", proSupplier=" + proSupplier+ "]";}}好了,运⾏上⾯程序,我们得到下⾯的数据,就是我们要获得的最终数据获得数据成功,这就是我们要获得最终的数据结果,最后我要说的是,此处这个⽹页算是⽐较简单的,⽽且,⽹页源码可以看到源数据,并且此⽅式是以get⽅式进⾏数据提交,真正采集的时候,有些⽹页结构⽐较复杂,可能会存在着源码⾥⾯没有我们所要提取的数据,关于这⼀点的解决⽅式,以后给⼤家进⾏介绍。
Java获取⽹页数据步骤⽅法详解在很多⾏业当中,我们需要对⾏业进⾏分析,就需要对这个⾏业的数据进⾏分类,汇总,及时分析⾏业的数据,对于公司未来的发展,有很好的参照和横向对⽐。
⾯前通过⽹络进⾏数据获取是⼀个很有效⽽且快捷的⽅式。
⾸先我们来简单的介绍⼀下,利⽤java对⽹页数据进⾏抓取的⼀些步骤,有不⾜的地⽅,还望指正,哈哈。
屁话不多说了。
其实⼀般分为以下步骤:1:通过HttpClient请求到达某⽹页的url访问地址(特别需要注意的是请求⽅式)2:获取⽹页源码3:查看源码是否有我们需要提取的数据4:对源码进⾏拆解,⼀般使⽤分割,正则或者第三⽅jar包5:获取需要的数据对⾃⼰创建的对象赋值6:数据提取保存下⾯简单的说⼀下在提取数据中的部分源码,以及⽤途:/*** 向指定URL发送GET⽅法的请求** @param url* 发送请求的URL* @param param* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return URL 所代表远程资源的响应结果*/public static String sendGet(String url, String param) {String result = "";BufferedReader in = null;try {String urlNameString = url;URL realUrl = new URL(urlNameString);// 打开和URL之间的连接URLConnection connection = realUrl.openConnection();// 设置通⽤的请求属性connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "Keep-Alive");connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");// 建⽴实际的连接connection.connect();// 获取所有响应头字段Map<String, List<String>> map = connection.getHeaderFields();// 定义 BufferedReader输⼊流来读取URL的响应in = new BufferedReader(new InputStreamReader(connection.getInputStream())); //这⾥如果出现乱码,请使⽤带编码的InputStreamReader构造⽅法,将需要的编码设置进去String line;while ((line = in.readLine()) != null) {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;}解析存储数据public Bid getData(String html) throws Exception {//获取的数据,存放在到Bid的对象中,⾃⼰可以重新建⽴⼀个对象存储Bid bid = new Bid();//采⽤Jsoup解析Document doc = Jsoup.parse(html);// System.out.println("doc内容" + doc.text());//获取html标签中的内容trElements elements = doc.select("tr");System.out.println(elements.size() + "****条");//循环遍历数据for (Element element : elements) {if (element.select("td").first() == null){continue;}Elements tdes = element.select("td");for(int i = 0; i < tdes.size(); i++){this.relation(tdes,tdes.get(i).text(),bid,i+1);}}return bid;}得到的数据Bid {h2 = '详见内容',itemName = '诉讼服务中⼼设备采购',item = '货物/办公消耗⽤品及类似物品/其他办公消耗⽤品及类似物品',itemUnit = '详见内容',areaName = '港北区',noticeTime = '2018年10⽉22⽇ 18:41',itemNoticeTime = 'null',itemTime = 'null',kaibiaoTime = '2018年10⽉26⽇ 09:00',winTime = 'null',kaibiaoDiDian = 'null',yusuanMoney = '¥67.00元(⼈民币)',allMoney = 'null',money = 'null',text = ''}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
使用JAVA进行网络爬虫和数据抓取的方法与建议一、引言随着互联网的快速发展,网络上的数据量也在不断增长。
为了获取和分析这些数据,网络爬虫和数据抓取成为了一种重要的技术手段。
本文将介绍使用JAVA进行网络爬虫和数据抓取的方法与建议。
二、网络爬虫的原理网络爬虫是一种自动化程序,通过模拟浏览器的行为,访问网页并抓取其中的数据。
其主要原理包括以下几个步骤:1. 发送HTTP请求:通过JAVA的网络编程库,发送HTTP请求到目标网址。
2. 下载网页内容:获取到HTTP响应后,将网页内容下载到本地。
3. 解析网页内容:使用HTML解析库,解析网页的结构,提取出需要的数据。
4. 存储数据:将提取到的数据存储到数据库或者文件中。
三、JAVA网络编程库的选择在使用JAVA进行网络爬虫和数据抓取之前,我们需要选择一个适合的网络编程库。
常用的网络编程库有Apache HttpClient、OkHttp等。
这些库提供了丰富的API,可以方便地发送HTTP请求和处理HTTP响应。
四、HTML解析库的选择HTML解析库可以帮助我们解析网页的结构,提取出需要的数据。
常用的HTML解析库有Jsoup、HtmlUnit等。
这些库提供了简洁的API,可以方便地进行网页解析和数据提取。
五、设置合适的请求头在发送HTTP请求时,我们需要设置合适的请求头。
一些网站可能会对爬虫进行限制,通过设置合适的请求头可以模拟浏览器的行为,降低被封禁的风险。
常见的请求头包括User-Agent、Referer等。
六、处理反爬机制为了防止被爬虫抓取,一些网站会采取一些反爬机制,如验证码、IP封禁等。
在进行网络爬虫和数据抓取时,我们需要针对这些反爬机制进行相应的处理。
可以通过使用代理IP、使用验证码识别库等方式来应对反爬机制。
七、数据存储与处理在进行数据抓取之后,我们需要将抓取到的数据进行存储和处理。
可以选择将数据存储到数据库中,如MySQL、MongoDB等;也可以选择将数据存储到文件中,如CSV、JSON等。
java实现maven项⽬最简单的⽹络爬⾍并导出爬取的数据⼀、pom包引⼊<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.3</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.5.3</version></dependency><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.10.2</version></dependency><!-- poi的依赖包 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.16</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.16</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-excelant</artifactId><version>3.16</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-examples</artifactId><version>3.16</version></dependency>⼆、创建实体类Product 属性可以根据⾃已的业务定义(⽣成set get ⽅法快捷键 alt+insert )private String productName; //品名private String specs;//规格private String brand; //品牌private String lowerPrice; //价格private String OfferArea; //报价区域private String OfferCompany; //报价企业private String offerDate; //报价⽇ 三、抓取数据业务代码import java.io.FileNotFoundException;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;import com.dark.pojo.Product;import com.dark.util.POItoExcel;public class Reptile {public static void main(String[] args) throws FileNotFoundException, IOException {List<Product> list=getInfor("https:///prices/"); //要抓取数据的 url 返回多条数据,POItoExcel.toExcel(list); //导出到Excel 根据业务可以存⼊数据库}public static List<Product> getInfor(String url){List<Product> proList=new ArrayList<Product>();try {Document doc=Jsoup.connect(url).get(); //使⽤Jsoup 解析HTMLElements pages=doc.select(".pages a"); //.pages a HTML类选择器 pages 下⾯的 a 标签,这⾥是获取最⼤页数for (int i = 0; i < pages.size(); i++) { //遍历页数抓取每页数据url = "https:///prices/"+ (i + 1) +".html";doc=Jsoup.connect(url).get();Elements table=doc.select(".b-j-con table:first-child"); // .b-j-con 找到要抓取数据的table表(.xx 代表类选择器)Elements tbody=table.select("tbody");//获取到表单的体Elements trList=tbody.select("tr");//找到 tr 标签⾥⾯的数据trList.remove(0);for(Element tr:trList){ //遍历抓取数据Elements tdList=tr.select("td");Product product=new Product(); //该td 标签下⾯有⼆级标签 product.setProductName(tdList.get(0).select("p a").html().toString());//品名product.setSpecs(tdList.get(1).html().toString());//规格product.setBrand(tdList.get(2).html().toString());//品牌product.setLowerPrice(tdList.get(3).html().toString());//价格product.setOfferArea(tdList.get(4).select("p").html().toString());//报价区域product.setOfferCompany(tdList.get(5).select("p").html().toString());//报价企业product.setOfferDate(tdList.get(6).html().toString());proList.add(product); //数据封装List}}} catch (IOException e) {e.printStackTrace();}return proList;}} 四、导出数据(根据业务可以存⼊数据库) import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.List;import ermodel.Cell;import ermodel.CellStyle;import ermodel.HorizontalAlignment;import ermodel.Row;import ermodel.VerticalAlignment;import org.apache.poi.ss.util.CellRangeAddress;import ermodel.XSSFCell;import ermodel.XSSFRow;import ermodel.XSSFSheet;import ermodel.XSSFWorkbook;import com.dark.pojo.Product;public class POItoExcel {public static void toExcel(List<Product> list) throws FileNotFoundException, IOException{ XSSFWorkbook workBook=new XSSFWorkbook();XSSFSheet sheet=workBook.createSheet();CellRangeAddress cra=new CellRangeAddress(0,1, 0, 6);sheet.addMergedRegion(cra);Row row2=sheet.createRow(0);Cell cell=row2.createCell(0);cell.setCellValue("新凤鸣报价单");CellStyle cs=workBook.createCellStyle();cs.setAlignment(HorizontalAlignment.CENTER);cs.setVerticalAlignment(VerticalAlignment.CENTER);cs.setFillBackgroundColor((short) 59);cell.setCellStyle(cs);Row row=sheet.createRow(2);Cell cell11=row.createCell(0);cell11.setCellValue("品名");Cell cell22=row.createCell(1);cell22.setCellValue("规格型号");Cell cell33=row.createCell(2);cell33.setCellValue("品牌");Cell cell44=row.createCell(3);cell44.setCellValue("价格");Cell cell55=row.createCell(4);cell55.setCellValue("报价区域");Cell cell66=row.createCell(5);cell66.setCellValue("报价企业");Cell cell77=row.createCell(6);cell77.setCellValue("报价时间");for(int i=0;i<list.size();i++){XSSFRow row4=sheet.createRow(i+3);XSSFCell cell1=row4.createCell(0);XSSFCell cell2=row4.createCell(1);XSSFCell cell3=row4.createCell(2);XSSFCell cell4=row4.createCell(3);XSSFCell cell5=row4.createCell(4);XSSFCell cell6=row4.createCell(5);XSSFCell cell7=row4.createCell(6);cell1.setCellValue(list.get(i).getProductName());cell2.setCellValue(list.get(i).getSpecs());cell3.setCellValue(list.get(i).getBrand());cell4.setCellValue(list.get(i).getLowerPrice());cell5.setCellValue(list.get(i).getOfferArea());cell6.setCellValue(list.get(i).getOfferCompany());cell7.setCellValue(list.get(i).getOfferDate());}workBook.write(new FileOutputStream(new File("E:\\\\测试.xls")) ); workBook.close();}}。
java抓取网页内容三种方式2011-12-05 11:23一、GetURL.javaimport java.io.*;import .*;public class GetURL {public static void main(String[] args) {InputStream in = null;OutputStream out = null;try {// 检查命令行参数if ((args.length != 1)&& (args.length != 2))throw new IllegalArgumentException("Wrong number of args");URL url = new URL(args[0]); //创建 URLin = url.openStream(); // 打开到这个URL的流if (args.length == 2) // 创建一个适当的输出流out = new FileOutputStream(args[1]);else out = System.out;// 复制字节到输出流byte[] buffer = new byte[4096];int bytes_read;while((bytes_read = in.read(buffer)) != -1)out.write(buffer, 0, bytes_read);}catch (Exception e) {System.err.println(e);System.err.println("Usage: java GetURL <URL> [<filename>]");}finally { //无论如何都要关闭流try { in.close(); out.close(); } catch (Exception e) {}}}}运行方法:C:\java>java GetURL http://127.0.0.1:8080/kj/index.html index.html 二、geturl.jsp<%@ page import="java.io.*" contentType="text/html;charset=gb2312" %> <%@ page language="java" import=".*"%><%String htmpath=null;BufferedReader in = null;InputStreamReader isr = null;InputStream is = null;PrintWriter pw=null;HttpURLConnection huc = null;try{htmpath=getServletContext().getRealPath("/")+"html\\morejava.html"; pw=new PrintWriter(htmpath);URL url = new URL("http://127.0.0.1:8080/kj/morejava.jsp"); //创建 URL huc = (HttpURLConnection)url.openConnection();is = huc.getInputStream();isr = new InputStreamReader(is);in = new BufferedReader(isr);String line = null;while(((line = in.readLine()) != null)) {if(line.length()==0)continue;pw.println(line);}}catch (Exception e) {System.err.println(e);}finally { //无论如何都要关闭流try { is.close(); isr.close();in.close();huc.disconnect();pw.close(); } catch (Exception e) {}}%>OK--,创建文件成功三、HttpClient.javaimport java.io.*;import .*;public class HttpClient {public static void main(String[] args) {try {// 检查命令行参数if ((args.length != 1) && (args.length != 2))throw new IllegalArgumentException("Wrong number of args");OutputStream to_file;if (args.length == 2)to_file = new FileOutputStream(args[1]);//输出到文件elseto_file = System.out;//输出到控制台URL url = new URL(args[0]);String protocol = url.getProtocol();if (!protocol.equals("http"))throw new IllegalArgumentException("Must use 'http:' protocol"); String host = url.getHost();int port = url.getPort();if (port == -1) port = 80;String filename = url.getFile();Socket socket = new Socket(host, port);//打开一个socket连接InputStream from_server = socket.getInputStream();//获取输入流PrintWriter to_server = new PrintWriter(socket.getOutputStream());//获取输出流to_server.print("GET " + filename + "\n\n");//请求服务器上的文件to_server.flush(); // Send it right now!byte[] buffer = new byte[4096];int bytes_read;//读服务器上的响应,并写入文件。
java利⽤url实现⽹页内容的抓取闲来⽆事,刚学会把git部署到远程服务器,没事做,所以简单做了⼀个抓取⽹页信息的⼩⼯具,⾥⾯的⼀些数值如果设成参数的话可能扩展性能会更好!希望这是⼀个好的开始把,也让我对字符串的读取掌握的更加熟练了,值得注意的是JAVA1.8⾥⾯在使⽤String拼接字符串的时候,会⾃动把你要拼接的字符串⽤StringBulider来处理,⼤⼤优化了String 的性能,闲话不多说,show my XXX code~运⾏效果:⾸先打开百度百科,搜索词条,⽐如“演员”,再按F12查看源码然后抓取你想要的标签,注⼊LinkedHashMap⾥⾯就ok了,很简单是吧!看看代码罗import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import .HttpURLConnection;import .URL;import java.util.*;/*** Created by chunmiao on 17-3-10.*/public class ReadBaiduSearch {//储存返回结果private LinkedHashMap<String,String> mapOfBaike;//获取搜索信息public LinkedHashMap<String,String> getInfomationOfBaike(String infomationWords) throws IOException {mapOfBaike = getResult(infomationWords);return mapOfBaike;}//通过⽹络链接获取信息private static LinkedHashMap<String, String> getResult(String keywords) throws IOException {//搜索的urlString keyUrl = "/search?word=" + keywords;//搜索词条的节点String startNode = "<dl class=\"search-list\">";//词条的链接关键字String keyOfHref = "href=\"";//词条的标题关键字String keyOfTitle = "target=\"_blank\">";String endNode = "</dl>";boolean isNode = false;String title;String href;String rLine;LinkedHashMap<String,String> keyMap = new LinkedHashMap<String,String>();//开始⽹络请求URL url = new URL(keyUrl);HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);//读取⽹页内容while ((rLine = bufferedReader.readLine()) != null){//判断⽬标节点是否出现if(rLine.contains(startNode)){isNode = true;}//若⽬标节点出现,则开始抓取数据if (isNode){//若⽬标结束节点出现,则结束读取,节省读取时间if (rLine.contains(endNode)) {//关闭读取流bufferedReader.close();inputStreamReader.close();break;}//若值为空则不读取if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){keyMap.put(title,href);}}}return keyMap;}//获取词条对应的urlprivate static String getHref(String rLine,String keyOfHref){String baikeUrl = "";String result = "";if(rLine.contains(keyOfHref)){//获取urlfor (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != '\"');j ++){result += rLine.charAt(j);}//获取的url中可能不含baikeUrl,如果没有则在头部添加⼀个if(!result.contains(baikeUrl)){result = baikeUrl + result;}}return result;}//获取词条对应的名称private static String getName(String rLine,String keyOfTitle){String result = "";//获取标题内容if(rLine.contains(keyOfTitle)){result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length());//将标题中的内容含有的标签去掉result = result.replaceAll("<em>|</em>|</a>|<a>","");}return result;}}以上就是本⽂的全部内容,希望本⽂的内容对⼤家的学习或者⼯作能带来⼀定的帮助,同时也希望多多⽀持!。
java爬虫抓取网页数据教程数据是科研活动重要的基础,而爬虫是获取数据一个比较常见的方法,爬虫的基本原理很简单,就是利用程序访问互联网,然后将数据保存到本地中。
我们都知道,互联网提供的服务大多数是以网站的形式提供的。
我们需要的数据一般都是从网站中获取的,如电商网站商品信息、商品的评论、微博的信息等。
爬虫和我们手动将看到的数据复制粘贴下来是类似的,只是获取大量的数据靠人工显然不太可能。
因此,需要我们使用工具来帮助获取知识。
使用程序编写爬虫就是使用程序编写一些网络访问的规则,将我们的目标数据保存下来。
Java作为爬虫语言的一种,下面为大家介绍java爬虫抓取网页数据教程。
1、使用bbbClient简单抓取网页首先,假设我们需要爬取数据学习网站上第一页的博客(bbb://aaadatalearneraaa/blog)。
首先,我们需要使用导入bbbClient 4.5.3这个包(这是目前最新的包,你可以根据需要使用其他的版本)。
Java本身提供了关于网络访问的包,在中,然后它不够强大。
于是Apache基金会发布了开源的bbb请求的包,即bbbClient,这个包提供了非常多的网络访问的功能。
在这里,我们也是使用这个包来编写爬虫。
好了,使用pom.xml下载完这个包之后我们就可以开始编写我们的第一个爬虫例子了。
其代码如下(注意,我们的程序是建立在test包下面的,因此,需要在这个包下才能运行):package test;import org.apache.bbb.bbbEntity;importorg.apache.bbb.client.methods.CloseablebbbResponse;import org.apache.bbb.client.methods.bbbGet;importorg.apache.bbb.impl.client.CloseablebbbClient;importorg.apache.bbb.impl.client.bbbClients;importorg.apache.bbb.util.EntityUtils;import java.io.IOException;/*** 第一个爬虫测试* Created by DuFei on 2017/7/27.*/public class FirstTest {public static void main(String[] args) {//建立一个新的请求客户端CloseablebbbClient bbbClient =bbbClients.createDefault();//使用bbbGet方式请求网址bbbGet bbbGet = new bbbGet("bbb://aaadatalearneraaa/blog");//获取网址的返回结果CloseablebbbResponse response = null;try {response = bbbClient.execute(bbbGet);} catch (IOException e) {e.printStackTrace();}//获取返回结果中的实体bbbEntity entity = response.getEntity();//将返回的实体输出try {System.out.println(EntityUtils.toString(entity));EntityUtils.consume(entity);} catch (IOException e) {e.printStackTrace();}}}如上面的代码所示,爬虫的第一步需要构建一个客户端,即请求端,我们这里使用CloseablebbbClient作为我们的请求端,然后确定使用哪种方式请求什么网址,再然后使用bbbResponse获取请求的位置对应的结果即可。
java 爬虫案例Java爬虫案例1. 爬取网页内容Java爬虫可以通过发送HTTP请求获取网页的内容。
可以使用Java 的URLConnection或者HttpClient等工具类库发送GET或POST请求,并获取返回的网页内容。
通过解析网页的HTML结构,可以提取出所需的信息。
2. 提取网页中的链接爬虫可以通过解析网页的HTML结构,提取出所有的链接。
可以使用Java的正则表达式、Jsoup等工具来解析网页。
通过遍历网页中的链接,可以进一步获取其他网页的内容。
3. 爬取图片Java爬虫可以通过解析网页的HTML结构,提取出图片的链接,然后使用Java的IO流将图片保存到本地或者其他存储介质中。
可以使用Java的正则表达式、Jsoup等工具来解析网页,并使用Java 的IO流进行文件的读写操作。
4. 爬取表格数据Java爬虫可以通过解析网页的HTML结构,提取出表格中的数据。
可以使用Java的正则表达式、Jsoup等工具来解析网页,并通过遍历表格的行和列,提取出所需的数据。
5. 登录网站爬取数据有些网站需要登录才能获取到数据,Java爬虫可以模拟登录过程,发送POST请求并携带登录信息,然后获取登录后的网页内容。
可以使用Java的URLConnection或者HttpClient等工具类库发送POST 请求,并获取返回的登录后的网页内容。
6. 爬取动态网页有些网页内容是通过JavaScript动态生成的,Java爬虫可以使用无头浏览器(headless browser)来模拟浏览器的行为,执行JavaScript代码,并获取动态生成的网页内容。
可以使用Java的Selenium等工具来模拟浏览器的行为。
7. 爬取API数据有些网站提供了API接口,Java爬虫可以通过发送HTTP请求并携带相应的参数,获取API返回的数据。
可以使用Java的URLConnection或者HttpClient等工具类库发送HTTP请求,并解析API返回的数据。