httpclient 抓取网页(如何用httpclient+jsoup实现抓取网页分享(图))
优采云 发布时间: 2021-09-28 21:13httpclient 抓取网页(如何用httpclient+jsoup实现抓取网页分享(图))
和之前的博客一样,我在学习使用httpclient实现网络爬虫的时候,在网上搜索了很多资料,但是httpclient版本是3.1或4.3的之前版本。我使用我自己了解的 httpclient4.5。今天把自己写的httpclient+jsoup的网页爬取分享给大家。
httpclient+jsoup 获取网页非常简单。首先通过httpclient的get方法获取一个网页的所有内容(有不懂的可以看我上一篇get方法的文章),然后通过jsoup获取一个网页的所有内容。解析内容,获取该网页中的所有链接,然后通过get方法获取这些链接中网页的内容,这样我们就可以获取到一个网页下所有链接的网页内容。例如,如果我们得到一个网页,它下面有 50 个链接,我们可以得到 50 个网页。下面是代码,让我们感受一下
获取网址
public class GetUrl {
public static List getUrl(String ur) {
//创建默认的httpClient实例
CloseableHttpClient client = HttpClients.createDefault();
//创建list存放已读取过的页面
List urllist = new ArrayList();
//创建get
HttpGet get=new HttpGet(ur);
//设置连接超时
Builder custom = RequestConfig.custom();
RequestConfig config = custom.setConnectTimeout(5000).setConnectionRequestTimeout(1000).setSocketTimeout(5000).build();
get.setConfig(config);
//设置消息头部
get.setHeader("Accept", "Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
get.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");
try {
//执行get请求
CloseableHttpResponse response = client.execute(get);
//获取响应实体
HttpEntity entity = response.getEntity();
//将响应实体转为String类型
String html = EntityUtils.toString(entity);
//通过jsoup将String转为jsoup可处理的文档类型
Document doc = Jsoup.parse(html);
//找到该页面中所有的a标签
Elements links = doc.getElementsByTag("a");
int i=1;
for (Element element : links) {
//获取到a标签中href属性的内容
String url = element.attr("href");
//对href内容进行判断 来判断该内容是否是url
if(url.startsWith("http://blog.csdn.net/") && !urllist.contains(url)){
GetPage.getPage(url);
System.out.println(url);
urllist.add(url);
i++;
}
}
response.close();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return urllist;
}
}
根据获取到的url生成页面
最后,测试类
public class Test {
public static void main(String[] args) {
List list = GetUrl.getUrl("http://blog.csdn.net/");
System.out.println("所写链接内的所有内容");
int i=1;
for (String url : list) {
GetUrl.getUrl(url);
System.out.println("第"+i+"条链接内容");
i++;
}
}
}
以上就是如何使用httpclient+jsoup爬取网页。我希望它会对大家有所帮助。