Java爬虫初试01--Jsoup and httpClient+正则表达
1 使用JSoup对虎扑新闻进行爬取
目标网站:虎扑体育网
爬取内容:链接+标题
工具:idea +Jsoup
效果:

开始:
引入Jsoup依赖:
org.jsoup jsoup 1.12.1
编写Jsoup工具类:
package Jsoup;import com.sun.xml.internal.ws.developer.MemberSubmissionEndpointReference;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;import java.io.IOException;public class JsoupTest {public void jsoupList(String url){try {
//拿到网页内容Document document= org.jsoup.Jsoup.connect(url).get();
//获取想拿的值,通过css选择器Elements elements=document.select("div.news-list>ul>li>div.list-hd>h4>a");
//循环输出即可for (Element element:elements) {String d_url=element.attr("href");String title=element.ownText();System.out.println("详情页链接:"+d_url+",详情页标题:"+title);}} catch (IOException e) {e.printStackTrace();}}}
测试运行:
public static void main(String[] args){String url="https://voice.hupu.com/nba";JsoupTest jsoupTest=new JsoupTest();jsoupTest.jsoupList(url);}
成功!!!
原理分析
目标网站分析:对目标网站进行分析,了解抓取的位置(通过Css选择器)
想要拿到对应的东西 就需要通过css:div.news-list>ul>li>div.list-hd>h4>a
2 使用httpclient+正则表达式爬取虎扑
目标网站:虎扑体育网
爬取内容:链接+标题
工具:idea +HttpClient+正则
效果:

开始:
导入相关的包:
org.apache.httpcomponents httpclient 4.5.10 org.apache.httpcomponents httpcore 4.4.10 org.apache.httpcomponents httpmime 4.5.10
如下片段 是每一个标题的通用结构:所以结构需要严格把握,因为存在多个a的地方
代码:
package HttpClient;import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class HttpClientPc {public static void main(String[] args){String url="https://voice.hupu.com/nba";HttpClientPc httpClientPc=new HttpClientPc();httpClientPc.httpClientList(url);}/*** httpclient + 正则表达式 获取虎扑新闻列表页* @param url 虎扑新闻列表页url*/public void httpClientList(String url){try {CloseableHttpClient httpclient = HttpClients.createDefault();HttpGet httpGet = new HttpGet(url);CloseableHttpResponse response = httpclient.execute(httpGet);//对返回数据进行处理if (response.getStatusLine().getStatusCode() == 200) {HttpEntity entity = response.getEntity();String body = EntityUtils.toString(entity,"utf-8");if (body!=null) {/** 替换掉换行符、制表符、回车符,去掉这些符号,正则表示写起来更简单一些* 只有空格符号和其他正常字体*/Pattern p = Pattern.compile("\t|\r|\n");Matcher m = p.matcher(body);body = m.replaceAll("");/** 提取列表页的正则表达式* 去除换行符之后的 li* 与球迷亲切互动!凯尔特人官方晒球队开放训练日照片
*/Pattern pattern = Pattern.compile("\\s* \\s* (.*?)\\s*
\\s* " );Matcher matcher = pattern.matcher(body);// 匹配出所有符合正则表达式的数据while (matcher.find()){
// String info = matcher.group(0);
// System.out.println(info);// 提取出链接和标题System.out.println("详情页链接:"+matcher.group(1)+" ,详情页标题:"+matcher.group(2));}}else {System.out.println("处理失败!!!获取正文内容为空");}} else {System.out.println("处理失败!!!返回状态码:" + response.getStatusLine().getStatusCode());}}catch (Exception e){e.printStackTrace();}}}
参考文章:Java 网络爬虫,就是这么的简单_平头哥的技术博文-CSDN博客_java 爬虫
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
