java实现爬取指定网站的数据

合集下载

java抓取网页内容

java抓取网页内容

con.connect();
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(),"UTF-8"));
String s = "";
StringBuffer sb = new StringBuffer("");
String s = "";
StringBuffer sb = new StringBuffer("");
while ((s = br.readLine()) != null) {
i++;
sb.append(s+"\r\n");
}
这种方法抓取一般的网页应该没有问题,但当有些网页中存在一些嵌套的redirect连接时,它就会报Server redirected too many times这样的错误,这是因为此网页内部又有一些代码是转向其它网页的,循环过多导致程序出错。如果只想抓取本URL中的网页内容,而不愿意让它有其它的网页跳转,可以用以下的代码。
JAVA 抓取网页内容2011-01-06 16:43通过JAVA的API可以顺利的抓取网络上的大部分指定的网页内容,现与大家分享一下这方法理解与心得。最简单的一种抓取方法就是:
ห้องสมุดไป่ตู้
URL url = new URL(myurl);
BufferedReader br = new BufferedReader(newInputStreamReader(url.openStream()));
上面的程序抓取回来的全部内容都存放在sb这个字符串,我们就可以通过正则表达式对它进行分析,提取出自己想要的具体的内容,为我所用,呵呵,这是多么美妙的一件事情啊!

java网页数据抓取

java网页数据抓取

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获取网页数据步骤方法详解

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进行网络爬虫和数据抓取的方法与建议

使用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使用爬虫抓取网站网页内容的方法_java_脚本之家

JAVA使用爬虫抓取网站网页内容的方法_java_脚本之家

9
HttpClient client = new HttpClient();
10
String response = null ;
11
12
String keyword = null ;
13
PostMethod postMethod = new PostMethod(url);
14
// try {
15
16
68 69
.getOutputStream());
70
out.write(strPostRequest);
71
out.flush();
72 73
out.close();
74
}
// 读取内容
BufferedReader rd = new BufferedReader( new InputStreamReader(
56 57
System.setProperty( ".client.defaultReadTimeout" , "5000" );
58
try {
59
URL newUrl = new URL(strUrl);
60 61
HttpURLConnection hConnect = (HttpURLConnection) newUrl
33
.getBytes( "ISO‐8859‐1" ), "gb2312" );
34
//这里要注意下 gb2312要和你抓取网页的编码要一样
35
36
String p = response.replaceAll( "//&[a‐zA‐Z]{1,10};" , "" )

java实现maven项目最简单的网络爬虫并导出爬取的数据

java实现maven项目最简单的网络爬虫并导出爬取的数据

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抓取网页内容三种方式

Java抓取网页内容三种方式

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实现网页内容的抓取

java利用url实现网页内容的抓取

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;}}以上就是本⽂的全部内容,希望本⽂的内容对⼤家的学习或者⼯作能带来⼀定的帮助,同时也希望多多⽀持!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.
mon.*;
6.
7.importjava.util.ArrayList;
8.importjava.util.List;
9.
10.importorg.apache.http.HttpEntity;
11.importorg.apache.http.HttpHost;
104.}//System.out.println(newsList.get(0).getContent());
105.
106.}
107.}
108.
109.publicvoidPaserHtmlForNewsContent(String contentHtmlAddr, NewsInfo newsTemp)//通过上面获得的标题信息的连接,抓取标题的正文部分。
12.importorg.apache.http.HttpResponse;
13.importorg.apache.http.HttpStatus;
14.importorg.apache.http.client.HttpClient;
15.importorg.apache.http.client.methods.HttpGet;
63.}
64.
65.returnhtml;
66.}
67.
68.publicvoidParseHtmlForNewsList()
69.{
70.String html = GetHtml("/");
71.
72.//hupu voice的第一个可以暂时去掉一个css,这样就不用处理空格了
89.for(Element ele:linkElements)
90.{Байду номын сангаас
91.
92.NewsInfo newsTemp =newNewsInfo(ele.text(), ele.absUrl("href"));
93.
94.PaserHtmlForNewsContent(newsTemp.getHtmlAddr(),newsTemp);
131.tempImgList.add(ele.attr("src"));
132.newsTemp.setImageAddrList(tempImgList);
133.}
134.
135.}
136.}
137.
138.publicstaticvoidmain(String[] args)
139.{
140.CrawlHupu crawlHupu =newCrawlHupu();
100.if(newsTemp.getImageAddrList() !=null)
101.System.out.println(newsTemp.getImageAddrList().get(0));
102.System.out.println(newsTemp.getContent());
103.
30.{
31.String html =null;
32.HttpClient httpClient =newDefaultHttpClient();
33.//set proxy ,because of nsn
34.// HttpHost proxy = new HttpHost("10.68.120.11", 3128);
124.for(Element ele:contentElements)
125.{
126.newsTemp.setContent(ele.html());
127.}
128.for(Element ele:imgElements)
129.{
130.List<String> tempImgList =newArrayList<>();
24.
25.publicclassCrawlHupu
26.{
27.privateList<NewsInfo> newsList =newArrayList<>();//用来存储爬取的信息对象
28.
29.publicString GetHtml(String url)//还方法是设置网络链接,是固定的用法
35.// httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
36.
37.//configuration timeout
38.httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,20000);
119.if(!html.isEmpty())
120.{
121.Document doc = Jsoup.parse(html);
122.Elements contentElements = doc.select(cssQueryContent);
123.Elements imgElements = doc.select(cssQueryphoto);
114.//+"div#pageMain>div.pageMainLeft>div.detailWrap>div.detailIntr"
115."div#pageMain>div.pageMainLeft>div.detailWrap>div.detail";
116.//String cssQueryContent = "div.content>div.row>div.column>div#articlewrap.area";
39.
40.HttpGet httpGet =newHttpGet(url);
41.try
42.{
43.HttpResponse httpResponse = httpClient.execute(httpGet);
44.intresStatu = httpResponse.getStatusLine().getStatusCode();
这个类是用来解析网站的内容
重点是:"div#page>div#content>div#local>div#recommend>ul>li>a";
这里用用firefox的firebug组件查看网页的代码结构,不同的网页路径也不一样。
Java代码
1.packagezy.crawl.hupu;
2.
3.importjava.io.IOException;
141.crawlHupu.ParseHtmlForNewsList();
142.
143.}
144.
145.}
2.这个是要获取的信息的类。不多解释。
Java代码
mon;
2.
3.importjava.util.List;
4.
5.publicclassNewsInfo
73.//String cssQueryHupu = "div.content>div.row>div.column>div.row>div.column>div.uibox>div.uibox-con>ul.ui-list>li>a";
74.String cssQueryHupu ="div#mainbody>div.cjkx_mtsd>div.cjkx>ul.list_left>li>a";//这行是用来获取每条对象的标题信息
117.// String cssQueryphoto = "div.hp-wrap>div.voice-main>div.voice-item>ul>li>div.voice-read-detailed>div.voice-photoVideo>"
118.// + "div.voice-photo>div.small-img>img";
19.importorg.apache.http.util.EntityUtils;
20.importorg.jsoup.Jsoup;
21.importorg.jsoup.nodes.Document;
22.importorg.jsoup.nodes.Element;
23.importorg.jsoup.select.Elements;
77.//
78.// String cssQueryIteye = "div#page>div#content>div#local>div#recommend>ul>li>a";
79.if(!html.isEmpty())
80.{
81.Document doc = Jsoup.parse(html,"/");
45.if(resStatu == HttpStatus.SC_OK)
46.{
47.HttpEntity entity = httpResponse.getEntity();
48.if(entity !=null)
49.{
50.html = EntityUtils.toString(entity);
75.// String cssQueryHuxiu = "div.container-hx>div.row-fluid-wrap-hx>"
相关文档
最新文档