概述

我们可以在一些网站上看到一些文字,显示了历史上的今天发生了什么事情。例如CSDN的登录页面:
而我们今天的目标是百度搜索上显示的历史上的今天,如下:

(注:图片无法显示)

通过历史上的今天访问查看

我们需要获取“历史上的今天”的所有事件,然后可以把这些数据显示在自己的网站上,就可以给自己网站上也增加一个“历史上的今天”的功能。

准备

要想使用这个爬虫,需要如下知识:

  • hutool的hutool-http模块
  • Gson
  • Jsoup

其中hutool-http模块需要用来发送HTTP请求,请求URL,返回服务器的响应结果;而Gson用来处理json格式的字符串数据;Jsoup可用来处理html格式的内容。

分析

爬虫从来不是一上来就写代码的,最重要的是分析请求,如何获取到有效的信息,而最后才是写代码,只要爬取的思路理清楚后,代码是很容易完成的。

第一步,打开百度搜索关键字历史上的今天

(注:图片无法显示)

第二步,我们要看浏览器如何请求到“历史上的今天”这些数据的,按F12打开Network面板,然后刷新浏览器,查看请求。

发现通过如下的URL即可请求到“历史上的今天”的页面内容,返回的是html源码内容。

Request URL: https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E5%8E%86%E5%8F%B2%E4%B8%8A%E7%9A%84%E4%BB%8A%E5%A4%A9&fenlei=256&rsv_pq=a2dbc7d900047768&rsv_t=0c6ckpvpgFs4uKd8Xon5m%2FKW%2B4EZcnObkZ4N4A%2BBwxZNXkHgcrSoxlVwj20&rqlang=cn&rsv_enter=1&rsv_dl=ib&rsv_sug3=15&rsv_sug1=16&rsv_sug7=101
Request Method: GET
Status Code: 200 OK

也就是说我们要寻找的数据就在请求响应回的html源码内容中,但源码内容太多了,眼睛很难以找到,所以我们在Response面板的html源码内容中搜索上面显示的历史上的今天的关键字,例如搜索关键字"德国著名飞行员"。

发现共匹配到4个,在Response面板中查看html源码感觉还是不太方便,在页面按鼠标右键查看页面源码。
发现搜索到的结果有两种情况:

  • 第一种,结果隐藏在html注释中的json字符串中。
  • 第二种,结果在html标签中,需要提取。
    发现json字符串中的数据更加完整,更加方便提取。
    我们先把这段json格式的字符串复制到JSON可视化网站上查看。
    打开"视图"选项卡,以树形视图查看

其中date字段表示今天的日期,而cardList则是“历史上的今天”所有事件。cardList是一个数组,数组中每一项都是一个对象,cardList.yearTag表示事件的年份,cardList.url则是该事件的百度百科链接,cardList.titleTip是该事件的完整标题名称,cardList.title是标题简称,cardList.textTip是该事件的完整内容,cardList.text是事件内容摘要,cardList.image是该事件的图像。

我们发现上面的请求URL的参数太多了,我们可以尝试减少一些无用的参数,最后得到更加简洁的URL:

Request URL: https://www.baidu.com/s?wd=历史上的今天
Request Method: GET
Status Code: 200 OK

从上面的分析我们已经能得到我们需要的数据了,步骤如下:

  • 第一步,发送GET请求,注意携带请求头,响应返回html页面内容。
  • 第二步,从html页面内容中提取出藏有关键数据的json字符串。
  • 第三步,从json字符串中解析出我们需要的数据。

代码

通过上面的分析,我们很容易就可以写出代码。

注意,上面的分析跟编程语言,爬虫既可以用python写,也可以用Java来写。而我这里提供的仅仅是Java代码,当然也可以根据上面的分析写一份python代码。

代码如下:

public class Crawler {public static void main(String[] args) {// 第一步,拼接URLString url = "https://www.baidu.com/s?ie=UTF-8&wd=历史上的今天";// 设置请求头Map<String, String> headers = new HashMap<>();headers.put("User-Agent", " Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36");// 第二步,发送请求,获取响应,响应内容为html源码内容String htmlContent = HttpRequest.get(url).headerMap(headers, true).execute().body();// 第三步,提取html源码中的有效信息,是json字符串隐藏在注释中int beginIndex = htmlContent.indexOf("<!--s-data:") + 11;int endIndex = htmlContent.indexOf("true}-->") + 5;String jsonContent = htmlContent.substring(beginIndex, endIndex);// 第四步,使用Gson解析json字符串Gson gson = new Gson();JsonObject jsonObject = gson.fromJson(jsonContent, JsonObject.class);String today = jsonObject.get("date").getAsString();JsonArray cardList = jsonObject.get("cardList").getAsJsonArray();if (!cardList.isJsonNull() && cardList.size() > 0) {for (JsonElement jsonElement : cardList) {// 提取json字符串中的有效信息JsonObject card = jsonElement.getAsJsonObject();String yearTag = card.get("yearTag").getAsString();String baikeUrl = card.get("url").getAsString();String title = card.get("title").getAsString();String textTip = card.get("textTip").getAsString();String text = card.get("text").getAsString();String image = card.get("image").getAsString();System.out.println(yearTag + "\t\t" + baikeUrl + "\t\t" + title + "\t\t" + textTip + "\t\t" + text + "\t\t" + image);}}}
}

打印结果如下:

1999年        https://baike.baidu.com/item/%E8%B5%96%E8%8E%8E%C2%B7%E6%88%88%E5%B0%94%E5%B7%B4%E4%B9%94%E5%A8%83?fr=luckinsearch     前苏联领袖的妻子赖莎·戈尔...        赖莎·戈尔巴乔娃(Раи́са Макси́мовна Горбачёва,又译雷莎·戈巴卓娃,本姓Титаре́нко,19        赖莎·戈尔巴乔娃(Раи́са Макси́мовна Гор...      https://bkimg.cdn.bcebos.com/smart/377adab44aed2e73e840188a8501a18b86d6faef-bkimg-process,v_1,rw_1,rh_1,maxl_800,pad_1?x-bce-process=image/resize,m_fill,w_128,h_128,align_0,limit_0
1993年       https://baike.baidu.com/item/%E5%9F%83%E9%87%8C%E5%B8%8C%C2%B7%E5%93%88%E7%89%B9%E6%9B%BC?fr=luckinsearch      德国著名飞行员埃里希·哈特...        埃里希·哈特曼(Erich·Hartmann)是一位纳粹德国空军的头号王牌飞行员。这位前德国空军战斗机飞行员在第二次世界大战中以352架      埃里希·哈特曼(Erich·Hartmann)是一位纳粹德国空军的头号王...       https://bkimg.cdn.bcebos.com/smart/d52a2834349b033b8965b76e10ce36d3d439bd91-bkimg-process,v_1,rw_1,rh_1,maxl_800,pad_1?x-bce-process=image/resize,m_fill,w_128,h_128,align_0,limit_0
1964年       https://baike.baidu.com/item/%E5%BC%A0%E6%9B%BC%E7%8E%89?fr=luckinsearch       香港电影演员张曼玉出生     张曼玉(Maggie Cheung,1964年9月20日—) ,生于香港,祖籍上海,国家一级演员,爱丁堡大学荣誉博士,联合国儿童基金会中国大使。张曼玉是迄今华语影坛获奖最多的电影演员,奖项涵盖十余个国际影展。     张曼玉(Maggie Cheung,1964年9月20日—) ,生于香港,祖籍...       https://bkimg.cdn.bcebos.com/smart/42a98226cffc1e178a82206505dae103738da9774306-bkimg-process,v_1,rw_1,rh_1,maxl_800,pad_1?x-bce-process=image/resize,m_fill,w_128,h_128,align_0,limit_0
1957年       https://baike.baidu.com/item/%E8%AE%A9%C2%B7%E8%A5%BF%E8%B4%9D%E6%9F%B3%E6%96%AF?fr=luckinsearch       芬兰著名作曲家让·西贝柳斯...        让·西贝柳斯是芬兰作曲家。他的著名作品《芬兰颂》曾因沙俄禁演而改名《即兴曲》,芬兰独立后才以《芬兰颂》命名。他一生创作了100多部作品,为芬兰音乐开拓了一个新的时代。       让·西贝柳斯是芬兰作曲家。他的著名作品《芬兰颂》曾因沙俄禁...        https://bkimg.cdn.bcebos.com/smart/91529822720e0cf3a35fc68d0546f21fbe09aa18-bkimg-process,v_1,rw_1,rh_1,maxl_800,pad_1?x-bce-process=image/resize,m_fill,w_128,h_128,align_0,limit_0
1950年       https://baike.baidu.com/item/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E5%9B%BD%E5%BE%BD?fr=luckinsearch     中华人民共和国国徽图案正...     中华人民共和国国徽(英语:National Emblem of the People's Republic of China)是中华人民共和国主权的象征和标志。国徽        中华人民共和国国徽(英语:National Emblem of the People's...      https://bkimg.cdn.bcebos.com/smart/50da81cb39dbb6fd52666d670c6fbc18972bd4079915-bkimg-process,v_1,rw_1,rh_1,maxl_800,pad_1?x-bce-process=image/resize,m_fill,w_128,h_128,align_0,limit_0
1946年       https://baike.baidu.com/item/%E6%88%9B%E7%BA%B3%E5%9B%BD%E9%99%85%E7%94%B5%E5%BD%B1%E8%8A%82?fr=luckinsearch       首届戛纳国际电影节在法国...     戛纳国际电影节(英文:Cannes International Film Festival,法文:Festival De Cannes),亦译作康城(坎城)国际电影节,创        戛纳国际电影节(英文:Cannes International Film Festival,...      https://bkimg.cdn.bcebos.com/smart/9e3df8dcd100baa1cd1184a9f259ae12c8fcc3ce80c5-bkimg-process,v_1,rw_1,rh_1,maxl_800,pad_1?x-bce-process=image/resize,m_fill,w_128,h_128,align_0,limit_0
1945年       https://baike.baidu.com/item/%E8%8C%83%E5%BE%90%E4%B8%BD%E6%B3%B0?fr=luckinsearch      香港政治人物范徐丽泰出生        范徐丽泰  (1945年9月20日-),本名徐丽泰,香港建制派政治人物,现任港区全国人大代表及常务委员会成员,范徐丽泰早年在香港       范徐丽泰  (1945年9月20日-),本名徐丽泰,香港建制派政治...     https://bkimg.cdn.bcebos.com/smart/810a19d8bc3eb1351f3efb67af1ea8d3fc1f4474-bkimg-process,v_1,rw_1,rh_1,maxl_800,pad_1?x-bce-process=image/resize,m_fill,w_128,h_128,align_0,limit_0
1940年       https://baike.baidu.com/item/%E9%BA%BB%E7%94%9F%E5%A4%AA%E9%83%8E?fr=luckinsearch      日本政治家麻生太郎出生     麻生太郎(1940年9月20日-),日本政治家和企业家。出身政治世家,思想意识保守,不识民间疾苦,历史认识模糊,而个性张扬、口        麻生太郎(1940年9月20日-),日本政治家和企业家。出身政治世...       https://bkimg.cdn.bcebos.com/smart/03087bf40ad162d9f2d3bb483195beec8a1363276706-bkimg-process,v_1,rw_1,rh_1,maxl_800,pad_1?x-bce-process=image/resize,m_fill,w_128,h_128,align_0,limit_0
1936年       https://baike.baidu.com/item/%E7%8E%8B%E4%BA%9A%E6%A8%B5?fr=luckinsearch       被国民党特务刺杀的王亚樵逝世      王亚樵(1889-1936),字九光,抗日志士,民族英雄。1889年出生于安徽合肥,自幼读书,聪颖过人,少年时期目睹官吏豪强压榨人        王亚樵(1889-1936),字九光,抗日志士,民族英雄。1889年出...        https://bkimg.cdn.bcebos.com/smart/35a85edf8db1cb1380a9c5b9d754564e93584b5c-bkimg-process,v_1,rw_1,rh_1,maxl_800,pad_1?x-bce-process=image/resize,m_fill,w_128,h_128,align_0,limit_0
1911年       https://baike.baidu.com/item/%E8%B5%AB%E5%BE%B7?fr=luckinsearch        近代英国侵华代表人物赫德逝世      赫德,英国人,28岁担任大清海关总税务司,掌权长达45年,被清廷视为客卿,在衰朽的旧帝国制度中创造出唯一廉洁不贪腐的高效衙        赫德,英国人,28岁担任大清海关总税务司,掌权长达45年,被清...      https://bkimg.cdn.bcebos.com/smart/5bafa40f4bfbfbed410b0a9578f0f736aec31f8d-bkimg-process,v_1,rw_1,rh_1,maxl_800,pad_1?x-bce-process=image/resize,m_fill,w_128,h_128,align_0,limit_0
1899年       https://baike.baidu.com/item/%E5%88%97%E5%A5%A5%C2%B7%E6%96%BD%E7%89%B9%E5%8A%B3%E6%96%AF?fr=luckinsearch      德裔美国政治哲学家列奥·施...        列奥·施特劳斯(Leo Strauss)是一个争议且传奇的人物。列奥·施特劳斯(Leo Strauss)是一位神秘的政治哲学家。在里根、老布什     列奥·施特劳斯(Leo Strauss)是一个争议且传奇的人物。列奥·...        https://bkimg.cdn.bcebos.com/smart/34fae6cd7b899e511fc8c2aa4aa7d933c9950dcd-bkimg-process,v_1,rw_1,rh_1,maxl_800,pad_1?x-bce-process=image/resize,m_fill,w_128,h_128,align_0,limit_0
1870年       https://baike.baidu.com/item/%E6%99%AE%E6%B3%95%E6%88%98%E4%BA%89?fr=luckinsearch      普法战争,普鲁士军包围巴黎        1870~1871年普鲁士同法国之间的战争。因争夺欧洲大陆霸权和德意志统一问题,普法两国之间关系长期紧张。1870年7月14日,俾斯麦        1870~1871年普鲁士同法国之间的战争。因争夺欧洲大陆霸权和德...     https://bkimg.cdn.bcebos.com/smart/a044ad345982b2b7d0a2e36356e1dcef76094b362d4d-bkimg-process,v_1,rw_1,rh_1,maxl_800,pad_1?x-bce-process=image/resize,m_fill,w_128,h_128,align_0,limit_0
1863年       https://baike.baidu.com/item/%E5%8D%97%E5%8C%97%E6%88%98%E4%BA%89?fr=luckinsearch      南北战争的奇卡牟加战役结束       南北战争(American Civil War)即美国内战,是美国历史上唯一一次内战,参战双方为北方美利坚合众国和南方的美利坚联盟国。战        南北战争(American Civil War)即美国内战,是美国历史上唯一...      https://bkimg.cdn.bcebos.com/smart/0ff41bd5ad6eddc451dac9904f97a1fd5266d016950e-bkimg-process,v_1,rw_1,rh_1,maxl_800,pad_1?x-bce-process=image/resize,m_fill,w_128,h_128,align_0,limit_0
1842年       https://baike.baidu.com/item/%E8%A9%B9%E5%A7%86%E6%96%AF%C2%B7%E6%9D%9C%E7%93%A6?fr=luckinsearch       杜瓦瓶发明人詹姆斯·杜瓦出生      詹姆斯·杜瓦爵士(Sir James Dewar)(1842年9月20日-1923年3月27日)苏格兰物理学家,化学家,发明家。      詹姆斯·杜瓦爵士(Sir James Dewar)(1842年9月20日-1923年3...     https://bkimg.cdn.bcebos.com/smart/109eb7ec49a0314063d09f38-bkimg-process,v_1,rw_1,rh_1,maxl_800,pad_1?x-bce-process=image/resize,m_fill,w_128,h_128,align_0,limit_0
公元383年      https://baike.baidu.com/item/%E6%B7%9D%E6%B0%B4%E4%B9%8B%E6%88%98?fr=luckinsearch      淝水之战,前秦大军从长安...      淝水之战,发生于公元383年,是东晋时期北方的统一政权前秦向南方东晋发起的侵略吞并的一系列战役中的决定性战役,前秦出兵伐晋      淝水之战,发生于公元383年,是东晋时期北方的统一政权前秦向...     https://bkimg.cdn.bcebos.com/smart/8367d1fcb8ecccb2b801a009-bkimg-process,v_1,rw_1,rh_1,maxl_800,pad_1?x-bce-process=image/resize,m_fill,w_128,h_128,align_0,limit_0

拓展

需求

上面的URL只能获取到历史上的今天的事件,不能获取指定日期历史上的今天的事件,经过研究,还发现另一个接口,可以获取指定日期历史上的今天的事件。

分析

我们在上面的json字符串中有一个url字段,它的值是:

https://baike.baidu.com/calendar/

用浏览器打开该地址,可以查看指定日期的历史上的今天,并且也是百度的。
打开Network面板,刷新网页,查看这些请求,最终会发现这么一条URL,在XHR过滤下,该URL可以获取指定月份在历史的事件。

Request URL: https://baike.baidu.com/cms/home/eventsOnHistory/09.json?_=1632118966396
Request Method: GET
Status Code: 200 OK

例如,0930表示9月30日,如此这般。
在每一个具体日期下,可以看到历史上当天的所有事件。
得到了我们想要的数据后,我们再来观察下请求的URL,也许还能获得一些有意思的东西。

https://baike.baidu.com/cms/home/eventsOnHistory/09.json?_=1632118966396

我们猜测09.json中的09表示9月份,那么我们测试下8月份的请求URL应该是:

https://baike.baidu.com/cms/home/eventsOnHistory/08.json?_=1632118966396

通过浏览器访问该链接,果然如此:
那么如果我们要获取1月到12月的,那么将09.json修改为对应的月份即可,但需要注意如9月必须是09.json而不是9.json,即必须是两个数字,否则不会成功。

但上面的URL还带有一个_=1632118966396参数,该参数什么意思呢?虽然不同的月份用一个参数值好像也没有报错,但我们应该弄清楚该参数的含义。

猜测应该是时间戳,那我们用Java代码将这串数字转换下,看看是不是日期。

public class Test {public static void main(String[] args) {long _ = 1632118966396L;Date date = new Date(_);System.out.println(date);System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(date));}
}

但也可能只是我们的猜测,得去JavaScript源代码中去确认下。按Ctrl+F快捷键全局搜索关键字eventsOnHistory,这关键字就是URL中的某个词,最终找到的源码如下:
发现该文件的完整路径是:
根据该文件名及路径在Sources面板中找到该js文件
但发现该js文件中的所有内容都集中在一行,不可读,那么就需要格式化代码,点击下方的{ }格式化代码。
我们知道请求的URL是:

https://baike.baidu.com/cms/home/eventsOnHistory/08.json?_=1632118966396

我们可以在该JS代码中搜索cms/home/eventsOnHistory来判断该请求是在哪发出的。
可以看到是通过Ajax发送GET请求:

        getEventsData: function(a) {e.ajax({type: "GET",url: "/cms/home/eventsOnHistory/" + l.month + ".json",cache: !1,dataType: "json",success: function(e) {l.serializeEventsData(e),a()}})},

但并没有_=1632118966396的设置,所以需要继续找。

注意,上面的代码仅仅是定义了getEventData函数,并没有调用,所以我们要查找该函数的调用处。

继续在搜索框中搜索getEventsData,发现仍然没有_=1632118966396的设置。
继续查找buildPage函数的调用处。
已经到头了,所以我们要继续观察_=1632118966396是如何得到的,就需要打断点进行观察了。

l.buildPage()所在行打上断点,然后刷新网页,进行调试。
按快捷键F11或者下面的图标,进入到buildPage()函数的内部。
进入函数内部后,跳转到另一个js文件中了,然后格式化该js文件的代码,如下:
不断进行下一步的调试
终于发现了该参数,注意,这里的参数值不一样,是因为这是一个时间戳,时间在不断变化。注意观察代码:

d.cache === !1 && (d.url = Fn.test(o) ? o.replace(Fn, "$1_=" + Ln++) : o + (Hn.test(o) ? "&" : "?") + "_=" + Ln++)),

而时间戳的值是Ln赋予的,所以我们要去查找Ln的定义处。直接在下方的搜索框中搜索"Ln"即可,发现

var Ln = it.now()

又发现是调用了itnow()方法,那么又去找it定义处。
这是一个初始化函数,就不需要关心了,也不需要再往上查找了。

切换到Console面板,输入it即可查看it内容:
而继续在控制台中输入it.now()即可发现产生的值是什么了。发现it.now就是JavaScript中的new Date产生时间戳,而it.now()则是具体的毫秒数。
但必须注意,时间戳的值是不断变化的。

代码

通过上面的分析,我们可以写出代码如下:

public class Crawler {public static void main(String[] args) {/*9月份所有日期在历史上发生的事件集合URL:https://baike.baidu.com/cms/home/eventsOnHistory/09.json?_=1631613042210其中_参数是时间戳,表示当前日期的毫秒值而09表示月份,从01月到12月,分别数字是[01,12]*/// 第一步,拼接URLCalendar calendar = Calendar.getInstance();int month = calendar.get(Calendar.MONTH) + 1;// 月份String realMonth = (month < 10) ? "0" + month : month + "";long timestamp = new Date().getTime();// 时间戳String url = "https://baike.baidu.com/cms/home/eventsOnHistory/" + realMonth + ".json?_=" + timestamp;// 设置请求头Map<String, String> headers = new HashMap<>();headers.put("User-Agent", " Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36");headers.put("Host", "baike.baidu.com");headers.put("Referer", " https://baike.baidu.com/calendar/");// 第二步,发送请求,获取响应,响应内容为json字符串String jsonContent = HttpRequest.get(url).headerMap(headers, true).execute().body();// 第三步,使用Gson提取json字符串中的有效信息Gson gson = new Gson();JsonObject jsonObject = gson.fromJson(jsonContent, JsonObject.class);JsonObject realMonthJO = jsonObject.getAsJsonObject(realMonth);int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);String realTodayOfMonth = realMonth + ((dayOfMonth < 10) ? "0" + dayOfMonth : dayOfMonth + "");// 获取今天在本月中的日期,如本月是11月份,那么就是"1101"、"1102"...// 获取历史上今天所有的事情JsonArray dayOfMonthJA = realMonthJO.getAsJsonArray(realTodayOfMonth);if (!dayOfMonthJA.isJsonNull() && dayOfMonthJA.size() > 0) {for (JsonElement jsonElement : dayOfMonthJA) {JsonObject elementJO = jsonElement.getAsJsonObject();String year = elementJO.get("year").getAsString();String title = Jsoup.parse(elementJO.get("title").getAsString()).body().text();String festival = elementJO.get("festival").getAsString();String link = elementJO.get("link").getAsString();String desc = Jsoup.parse(elementJO.get("desc").getAsString()).body().text();System.out.println(year + "\t\t" + title + "\t\t" + festival + "\t\t" + link + "\t\t" + desc);}}}
}

打印结果如下:

383      淝水之战,前秦大军从长安出发攻打东晋               https://baike.baidu.com/item/%E6%B7%9D%E6%B0%B4%E4%B9%8B%E6%88%98       淝水之战,发生于公元383年,是东晋时期北方的统一政权前秦向南方东晋发起的侵略吞并的一系列战役中的决定性战役,前秦出兵伐晋
1842        杜瓦瓶发明人詹姆斯·杜瓦出生              https://baike.baidu.com/item/%E8%A9%B9%E5%A7%86%E6%96%AF%C2%B7%E6%9D%9C%E7%93%A6        詹姆斯·杜瓦爵士(Sir James Dewar)(1842年9月20日-1923年3月27日)苏格兰物理学家,化学家,发明家。
1863        南北战争的奇卡牟加战役结束               https://baike.baidu.com/item/%E5%8D%97%E5%8C%97%E6%88%98%E4%BA%89       南北战争(American Civil War)即美国内战,是美国历史上唯一一次内战,参战双方为北方美利坚合众国和南方的美利坚联盟国。战
1870        普法战争,普鲁士军包围巴黎                https://baike.baidu.com/item/%E6%99%AE%E6%B3%95%E6%88%98%E4%BA%89       1870~1871年普鲁士同法国之间的战争。因争夺欧洲大陆霸权和德意志统一问题,普法两国之间关系长期紧张。1870年7月14日,俾斯麦
1899        德裔美国政治哲学家列奥·施特劳斯出生              https://baike.baidu.com/item/%E5%88%97%E5%A5%A5%C2%B7%E6%96%BD%E7%89%B9%E5%8A%B3%E6%96%AF       列奥·施特劳斯(Leo Strauss)是一个争议且传奇的人物。列奥·施特劳斯(Leo Strauss)是一位神秘的政治哲学家。在里根、老布什
1911        近代英国侵华代表人物赫德逝世              https://baike.baidu.com/item/%E8%B5%AB%E5%BE%B7     赫德,英国人,28岁担任大清海关总税务司,掌权长达45年,被清廷视为客卿,在衰朽的旧帝国制度中创造出唯一廉洁不贪腐的高效衙
1936        被国民党特务刺杀的王亚樵逝世              https://baike.baidu.com/item/%E7%8E%8B%E4%BA%9A%E6%A8%B5        王亚樵(1889-1936),字九光,抗日志士,民族英雄。1889年出生于安徽合肥,自幼读书,聪颖过人,少年时期目睹官吏豪强压榨人
1940        日本政治家麻生太郎出生             https://baike.baidu.com/item/%E9%BA%BB%E7%94%9F%E5%A4%AA%E9%83%8E       麻生太郎(1940年9月20日-),日本政治家和企业家。出身政治世家,思想意识保守,不识民间疾苦,历史认识模糊,而个性张扬、口
1945        香港政治人物范徐丽泰出生                https://baike.baidu.com/item/%E8%8C%83%E5%BE%90%E4%B8%BD%E6%B3%B0       范徐丽泰 (1945年9月20日-),本名徐丽泰,香港建制派政治人物,现任港区全国人大代表及常务委员会成员,范徐丽泰早年在香港
1946        首届戛纳国际电影节在法国戛纳举行                https://baike.baidu.com/item/%E6%88%9B%E7%BA%B3%E5%9B%BD%E9%99%85%E7%94%B5%E5%BD%B1%E8%8A%82        戛纳国际电影节(英文:Cannes International Film Festival,法文:Festival De Cannes),亦译作康城(坎城)国际电影节,创
1950        中华人民共和国国徽图案正式诞生             https://baike.baidu.com/item/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E5%9B%BD%E5%BE%BD      中华人民共和国国徽(英语:National Emblem of the People's Republic of China)是中华人民共和国主权的象征和标志。国徽
1957        芬兰著名作曲家让·西贝柳斯逝世             https://baike.baidu.com/item/%E8%AE%A9%C2%B7%E8%A5%BF%E8%B4%9D%E6%9F%B3%E6%96%AF        让·西贝柳斯是芬兰作曲家。他的著名作品《芬兰颂》曾因沙俄禁演而改名《即兴曲》,芬兰独立后才以《芬兰颂》命名。他一生创作了100多部作品,为芬兰音乐开拓了一个新的时代。
1964        香港电影演员张曼玉出生             https://baike.baidu.com/item/%E5%BC%A0%E6%9B%BC%E7%8E%89        张曼玉(Maggie Cheung,1964年9月20日—)[1] ,生于香港,祖籍上海,国家一级演员,爱丁堡大学荣誉博士,联合国儿童基金会中国大使。张曼玉是迄今华语影坛获奖最多的电影演员,奖项涵盖十余个国际影展。
1993        德国著名飞行员埃里希·哈特曼逝世                https://baike.baidu.com/item/%E5%9F%83%E9%87%8C%E5%B8%8C%C2%B7%E5%93%88%E7%89%B9%E6%9B%BC       埃里希·哈特曼(Erich·Hartmann)是一位纳粹德国空军的头号王牌飞行员。这位前德国空军战斗机飞行员在第二次世界大战中以352架
1999        前苏联领袖的妻子赖莎·戈尔巴乔娃逝世              https://baike.baidu.com/item/%E8%B5%96%E8%8E%8E%C2%B7%E6%88%88%E5%B0%94%E5%B7%B4%E4%B9%94%E5%A8%83      赖莎·戈尔巴乔娃(Раи́са Макси́мовна Горбачёва,又译雷莎·戈巴卓娃,本姓Титаре́нко,19

总结:该接口可以获取任一日期在历史上发生的事件,而不仅仅是历史上的今天。除此之外,我们还进行了js分析,来判断URL参数的生成。

Java爬虫实践之获取历史上的今天相关推荐

  1. 基于Crawler4j的Java爬虫实践

    基于Crawler4j的Java爬虫实践 1. Introduction 2. 系统架构 2.1 crawler4j 2.2 jsoup 2.3 Apache Commons CSV 2.4 mave ...

  2. java爬虫京东商品,Java爬虫实现爬取京东上的手机搜索页面 HttpCliient+Jsoup

    1.需求及配置 需求:爬取京东手机搜索页面的信息,记录各手机的名称,价格,评论数等,形成一个可用于实际分析的数据表格. 使用maven项目,log4j记录日志,日志仅导出到控制台. maven依赖如下 ...

  3. 从零开始写Python爬虫 --- 1.5 爬虫实践: 获取百度贴吧内容

    从零开始写Python爬虫 --- 1.5 爬虫实践: 获取百度贴吧内容 Ehco 5 个月前 经过前期大量的学习与准备,我们重要要开始写第一个真正意义上的爬虫了.本次我们要爬取的网站是:百度贴吧,一 ...

  4. Java IO流练习题-获取文本上每个字符出现的次数

    获取文本上每个字符出现的次数 提示:遍历文本的每一个字符:字符及出现的次数保存在Map中:将Map中数据写入文件 package BYSSSExer2;import org.junit.Test;im ...

  5. 爬虫实例,获取豆瓣上某部电影的评论

    一.详细代码 import requests from requests.exceptions import RequestException from bs4 import BeautifulSou ...

  6. php历史上的今天源码,代码获取历史上的今天发生的事_基础知识

    //http://history.sturgeon.mopaas.com //主页 //http://history.sturgeon.mopaas.com/jsonp?callback=? //js ...

  7. 【爬虫实践】获取某城市天气数据

    功能需求 获取山东济南城市每天的天气情况. 需要获取四个数据:天气.温度.风向.风级. url地址:http://www.weather.com.cn/weather/101120101.shtml ...

  8. JAVA爬虫实践(实践二:博客园)

    分析博客园网站的请求可以发现,博客园的分页请求为POST方式,和知乎的滚动加载类似. 不同的是请求响应返回的是HTML而不是JSON. 这样可以套用上一篇爬知乎的代码,需要修改的部分就是POST方法传 ...

  9. Java爬虫实践:Jsoup+HttpUnit爬取今日头条、网易、搜狐、凤凰新闻

    0x0 背景 最近学习爬虫,分析了几种主流的爬虫框架,决定使用最原始的两大框架进行练手: Jsoup&HttpUnit 其中jsoup可以获取静态页面,并解析页面标签,最主要的是,可以采用类似 ...

最新文章

  1. java子类对象和成员变量的隐写方法重写
  2. sql 密码随机生成
  3. RabbitMQ-c在Linux上编译
  4. 【Linux】一步一步学Linux——sudo命令(105)
  5. mysql错误码 1045_MySql 错误代码 1045
  6. DJANGO,获取当前用户名,用户组名,用户组权限
  7. 【动态规划】完全背包问题
  8. Wallpaper:基于Typecho的壁纸头像站主题
  9. java swing 图层_用Swing制作精美的图层叠加图
  10. ROS学习笔记12(用Python写一个简单的消息发布和消息订阅)
  11. Hive Udf Rank
  12. win10应用安装位置修改方法
  13. 兼容M1芯片 Denise Audio poltergate Mac - 侧链均衡器
  14. Installation openQRM
  15. 基于SQL Server CE的移动服务系统开发
  16. Vue--改变鼠标指针的图片
  17. golang并发模式work
  18. 软件架构设计---软件架构风格
  19. 2020年2月15日 考试
  20. Android电视机(机顶盒)初次开发的一些经验分享

热门文章

  1. graphics.h 的下载及安装
  2. 用友U8/T3各版本下载
  3. 疑似“鬼影”病毒黑市热卖 8800元高价公然挑战法律
  4. xshell连接不上虚拟机问题,前提:虚拟机和主机能ping通
  5. inputStream(mark函数的应用)
  6. MCSD 70-483 Programming in C# 知识梳理(1)
  7. andriod-概述
  8. 线上虚拟创意展厅设计
  9. 野性消费之后,年轻人还能撑起国潮下一站吗?
  10. Win7,8的上帝模式文件夹 GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}