使用 HttpClient 和 jsoup 抓取
开发者头条中分享的所有文章(截止目前15000多条)。
数据:
点击下载
代码:
点击下载
public class ToutiaoArticles {
public static void main(String[] args) {
new ToutiaoArticles().fetch();
}
public void fetch() {
LocalDate startDate = new LocalDate(2014, 9, 27);
LocalDate endDate = LocalDate.now();
File outputFile = new File("D://data.csv");
String baseUrl = "http://toutiao.io/prev/";
PoolingHttpClientConnectionManager mgr = new PoolingHttpClientConnectionManager();
mgr.setMaxTotal(5);
mgr.setDefaultMaxPerRoute(5);
HttpClient httpClient = HttpClientBuilder.create().setConnectionManager(mgr).build();
HttpGet httpGet = null;
String date = null;
String url = null;
List<Link> linkInfos = null;
StringBuffer articleInfos = null;
while (startDate.isBefore(endDate) || startDate.isEqual(endDate)) {
date = startDate.toString("yyyy-MM-dd");
url = baseUrl + date;
System.out.println("[URL]-----" + url);
httpGet = new HttpGet(url);
try {
linkInfos = httpClient.execute(httpGet, new PageResponseHandler());
if (linkInfos != null) {
articleInfos = new StringBuffer();
for (int i = 0; i < linkInfos.size(); i++) {
Link k = linkInfos.get(i);
String data = date + "," + (i+1) + "," + k.getTitle() + "," + k.getOriginLink() + "," + k.getLink();
System.out.println(data);
articleInfos.append(data + "\r\n");
}
FileUtils.writeStringToFile(outputFile, articleInfos.toString(), "GBK", true);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
httpGet.releaseConnection();
}
startDate = startDate.plusDays(1);
}
}
class PageResponseHandler implements ResponseHandler<List<Link>> {
@Override
public List<Link> handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
HttpEntity entity = response.getEntity();
if (response.getStatusLine().getStatusCode() >= 300) {
EntityUtils.consume(entity);
return null;
}
if (entity == null) {
return null;
}
RequestConfig requestConfig = RequestConfig.custom().setRedirectsEnabled(false).build();
PoolingHttpClientConnectionManager mgr = new PoolingHttpClientConnectionManager();
mgr.setMaxTotal(5);
mgr.setDefaultMaxPerRoute(5);
HttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).setConnectionManager(mgr).build();
HttpGet httpGet = null;
HttpResponse httpResponse = null;
List<Link> linkInfos = new ArrayList<Link>();
Link lk = null;
String html = EntityUtils.toString(entity);
Document document = Jsoup.parse(html);
Elements links = document.getElementsByAttributeValue("target", "_blank");
for (int i = 0; i < links.size(); i++) {
lk = new Link();
lk.setLink(links.get(i).attr("href"));
lk.setTitle(links.get(i).text());
httpGet = new HttpGet(lk.getLink());
try {
httpResponse = httpClient.execute(httpGet);
if (httpResponse.getStatusLine().getStatusCode() == 302) {
String loc = httpResponse.getLastHeader("Location").getValue();
loc = loc.replaceAll("hmsr=toutiao.io", "");
loc = loc.replaceAll("&utm_medium=toutiao.io", "");
loc = loc.replaceAll("&utm_source=toutiao.io", "");
lk.setOriginLink(loc);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
httpGet.releaseConnection();
}
linkInfos.add(lk);
}
return linkInfos;
}
}
class Link {
private String title;
private String link;
private String originLink;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public String getOriginLink() {
return originLink;
}
public void setOriginLink(String originLink) {
this.originLink = originLink;
}
}
}
- 大小: 47.8 KB
- 大小: 26.5 KB
分享到:
相关推荐
在本文中,我们将深入探讨如何使用Node.js来抓取今日头条的数据。Node.js作为一个基于Chrome V8引擎的JavaScript运行环境,因其非阻塞I/O模型和轻量级特性,非常适合进行网络爬虫的开发。我们将主要关注以下几个方面...
标题中的“头条图集抓取——完整版python代码...开发者通过这些工具和技术,实现了从今日头条抓取图集信息的目标,为数据分析提供了原始数据。对于初学者来说,这是一个很好的学习案例,涵盖了网络爬虫的多个关键方面。
今日头条作为一款基于大数据和智能推荐算法的新闻应用,其源码中包含了许多关键的技术点,如内容抓取、数据处理、推荐算法实现、用户界面设计等,这些都是移动开发和大数据处理领域的宝贵学习资源。 【标签】:...
在“今日热榜”这个项目中,Go语言扮演了核心角色,用于快速抓取各大热门网站的头条信息。 1. **Go语言的特点** - **并发原语**:Go语言通过goroutines(轻量级线程)和channels提供了一种简单的方式来实现并发。...
【标题】"精仿今日头条App趣头条App源码.zip" 提供的是一个新闻资讯类应用程序的源代码,模仿了知名的“今日头条”应用。这个源码主要用于教学和学习目的,可以帮助开发者深入了解新闻咨询类App的开发流程和技术实现...
标题中的“采集今日头条内容”指的是从今日头条这个知名的新闻资讯平台抓取信息,这通常涉及到网络爬虫技术。网络爬虫是一种自动提取网页信息的程序,它通过模拟浏览器的行为,访问指定网站并获取所需数据。在这个...
DZ论坛的头条采集功能,就是指能够自动化地从各种来源抓取这些头条内容,将其整合到论坛的特定版块,以更新论坛的热点信息,提高用户参与度和社区活跃度。 二、一键采集的实现原理 1. 数据抓取:DZ论坛的一键采集...
仿今日头条的微信小程序旨在提供类似今日头条的用户体验,让用户在微信环境中便捷地浏览新闻、阅读文章。这款源码实现了高仿的今日头条界面设计,包括信息流展示、分类导航、文章详情页等功能,使得用户在微信内部就...
"今日头条" 这个标签明确了讨论的主题是与今日头条相关的技术,这可能涉及到的内容包括但不限于:新闻推荐算法、数据抓取技术、API使用、移动应用开发(Android或iOS)、后端服务集成等。今日头条作为一个知名的新闻...
开发者需要处理网络请求,使用如OkHttp或Retrofit这样的网络库进行数据抓取。同时,数据解析通常是JSON解析库Gson或Jackson的用武之地。在UI上,每个新闻条目通常包含标题、摘要、图片和时间戳等元素,可以通过...
【标题】"高仿今日头条"所指的是一款模仿今日头条应用或网站的产品,它可能是由开发者为了学习、测试或展示目的创建的。今日头条是一款知名的新闻聚合平台,它利用算法为用户提供个性化的内容推荐,涵盖新闻、娱乐、...
本案例"Python今日头条爬虫.zip"是一个基于Python实现的爬虫项目,旨在抓取和分析今日头条网站上的新闻数据。这个项目对于学习Python爬虫技术、了解网络数据抓取流程以及实践数据挖掘的应用具有很高的价值。 首先,...
在这个项目中,开发者可能使用了Python等编程语言,结合了网络爬虫技术,来获取并处理来自头条号平台的各种信息。 【描述】:描述中的“头条号爬虫案例.zip”表明这是一个关于如何通过编程手段,自动化地从头条号...
趣头条是一款流行的新闻资讯类应用程序,它通过提供金币奖励来鼓励用户阅读、分享和评论内容。这个源码可能是用编程语言编写的,可能包括了模拟点击、滑动等操作,以模拟真实用户的使用行为。 “按键精灵”是这个...
在本文中,我们将深入探讨如何使用C# WinForm来实现新闻抓取的功能。新闻抓取是一种从互联网上自动收集和处理...通过学习和实践,开发者不仅可以掌握新闻抓取的基本流程,还能提升在C#环境下开发桌面应用程序的能力。
标题中的“获取各种网站的热点头条的后台程序”指的是一个用于抓取并处理网络上热门新闻或头条信息的后台应用程序。这个程序的核心是利用Django框架构建的,Django是一个高级的Python Web框架,它鼓励快速开发和清洁...
11. **用户体验设计**:借鉴今日头条的设计理念,注重用户体验,包括文章分类、搜索、评论、点赞、分享等互动功能。 12. **测试与优化**:进行单元测试、集成测试,确保代码质量;进行性能优化,提高加载速度和响应...
【今日头条源码.zip】是一个包含了开发新闻类应用所需源代码的压缩包,旨在为开发者提供一个参考示例,特别是对于想要构建类似今日头条这样的新闻资讯应用的初学者来说,这是一个宝贵的资源。下面将详细阐述这个源码...