& lt; dependencies> & lt; dependency> & lt; groupId> org.apache.httpcomponents & lt; artifactId> httpclient & lt; version> 4.5.3 & lt;/dependency> & lt; dependency> & lt; !——jsoup HTML解析器库@ https://jsoup.org/? & lt; groupId> org.jsoup & lt; artifactId> jsoup & lt; version> 1.11.2 & lt;/dependency> & lt; !——https://mvnrepository.com/artifact/log4j/log4j——比; & lt; dependency> & lt; groupId> log4j & lt; artifactId> log4j & lt; version> 1.2.17 & lt;/dependency> & lt;/dependencies>
log4j配置(log4j . properties),将信息及以上等级信息输出到控制台,不单独设置输出文档。
log4j。rootLogger=INFO,控制台 #控制台 log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout。ConversionPattern=% d [% t] % 5 p [% c] - % m % n
<强> 2.1需求分析强>
第一步,建立客户端与服务端的连接,并通过URL获得网页上的HTML内容。
第二步,解析HTML内容,获取需要的元素。
第三步,将HTML内容输出到本地的文本文档中,可直接通过其他数据分析软件进行分析。
根据以上分析,建立4个类,GetHTML(用于获取网站HTML), ParseHTML(用于解析HTML),用WriteTo(用于输出文档),Maincontrol(主控)。下面分别对四个类进行说明。为使代码尽量简洁,所有的异常均从方法上直接抛出,不抓。
<强> 2.2代码强>
2.2.1GetHTML类
该类包含两个方法:getH(字符串url), urlControl(字符串baseurl, int页面),分别用于获取网HTML页及控制url。由于此次爬取的网页内容只是京东上某一类商品的搜索结果,所以不需要对页面上所有的url进行遍历,只需要观察翻页时url的变化,推出规律即可。只向外暴露urlControl方法,类中设置一个私人的日志属性:私有静态日志记录器=Logger.getLogger (getHTML.class);用于记录日志。
getH(字符串url),对单个url的HTML内容进行获取。
进口java.io.IOException; 进口org.apache.http.HttpEntity; 进口org.apache.http.client.ClientProtocolException; 进口org.apache.http.client.methods.CloseableHttpResponse; 进口org.apache.http.client.methods.HttpGet; 进口org.apache.http.impl.client.CloseableHttpClient; 进口org.apache.http.impl.client.HttpClients; 进口org.apache.http.util.EntityUtils; 进口org.apache.log4j.Logger; 公开课getHTML {//建立日志 私有静态日志记录器=Logger.getLogger (getHTML.class); 私人getH静态字符串(字符串url)抛出ClientProtocolException, IOException {//控制台输出日志,这样每条访问的URL都可以在控制台上看到访问情况 log.info(“正在解析" + url);/* *以下内容为HttpClient建立连接的一般用法 *使用HttpClient建立客户端 *使用得到方法访问指定URL *获得应答 * */CloseableHttpClient客户=HttpClients.createDefault (); HttpGet=new HttpGet (url); CloseableHttpResponse响应=client.execute(得到);/* *以下内容为将HTML内容转化为字符串 *获得应答体 *将应答体转为字符串格式,此处使用了EntityUtils中的toString方法,编码格式设置为“utf - 8” *完成后关闭客户端与应答 * */HttpEntity实体=response.getEntity (); 字符串内容; 如果(实体!=null) {=EntityUtils内容。toString(实体、“utf - 8”); client.close (); response.close (); 返回内容; 其他} 返回null; } 公共静态孔隙urlControl (String baseurl, int页面)抛出ClientProtocolException, IOException {//设置当前页计数 int数=1;//如果当前页小于想要爬取的页数则执行 而(计数& lt;页面){//实际访问的URL为不变的URL值拼接URL上变化的值 字符串u=baseurl +(2 *数- 1)+”,点击=0”;//此处调用ParseHTML类中的方法中对URL的HTML页面进行处理,后面详细介绍该类 字符串内容=ParseHTML.parse (getH (u) .toString ();//此处调用用WriteTo类中的方法对解析出来的内容写入到本地,后面详细介绍该类 WriteTo.writeto(内容); 数+ +; } } }Java爬虫实现爬取京东上的手机搜索页面HttpCliient + Jsoup