使用 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
分享到:
相关推荐
抓取今日头条街拍图集
使用nodejs抓取今日头条接口,并分析数据抓取用户数据
分析Ajax请求并抓取今日头条街拍美图 weixin_30791095 于 2019-03-25 00:07:00 发布 65 收藏 版权 1.抓取索引页内容 利用requests请求目标站点,得到索引网页HTML代码,返回结果 2.抓取详情页内容 解析返回结果...
python 抓取百度云分享数据,百度云最新接口抓取分享链接。
学习Python3的demo,实现了抓取网页版今日头条新闻首页的内容,并解析输出到控制台,具体教程请移步博客:https://blog.csdn.net/xiaocy66/article/details/82829120
java抓取微信公众号最近10篇文章,基于微信搜狗搜索实现。java源码.git 仓库 http://git.oschina.net/hcxy/WechatSpider
对于测试工程师来说:如果有开发文档,参考开发文档,如果没有开发文档,则需要抓取对应请求的URL的相关信息,分为对pc端Web...抓取的工具分为:独立工具Fiddler,及浏览器上的开发者工具,如果谷歌的f12开发者工具。
bsh for android : /mnt/sdcard/sl4a/scripts/geek.bsh , /mnt/sdcard/sl4a/res/geek.xml 运行 geek.bsh 抓取CSDN极客头条内容放入ListView , 用户点击选择, webViewShow 网页href
使用java语言,实现从某目录下,抓取所有的文件,组成完整的文件路径。
学习Python3的demo,实现了抓取网页版今日头条新闻首页的内容,并解析输出到控制台,具体教程请移步博客:https://blog.csdn.net/xiaocy66/article/details/82845130
根据给定的账号名抓取该账号所有的文章标题以及文章链接地址
抓取系统开发的分享,文档形式提供给大家学习参考使用。
Python爬虫+办公自动化+好玩DIY(完结)\章节03【编程让生活更美好】之【爬虫与信息搜集】
windows mobile 开发者 杂志. 因为抓取是自动的,可能有相关的招聘新闻 和不符正常理论的内容,请您注意甄别,谨慎 对待. 杂志以理论研究为主,其他附属内容一概不 负责. 制作:lanmuz 来自:天朝网络 版本:csdn专版...
爬取今日头条列表以及今日头条详情内容并存储到数据库。
4抓取微信公众号所有历史文章(3)
头条图集抓取——完整版python代码