首页 » PHP教程 » php和java爬虫技巧_初识爬虫的那天我选择了Java

php和java爬虫技巧_初识爬虫的那天我选择了Java

访客 2024-11-14 0

扫一扫用手机浏览

文章目录 [+]

后来,读研究生时,做项目的同时还要搞科研。
项目和科研,都须要采集大量的网络数据。
领头做项目的师兄,指定了一系列国内外网站,并把采集任务分配给我。
对付当时啥都不咋会的我,内心“啥?这该咋弄啊?这咋弄啊?……”可是没办法,即便瑟瑟颤动,硬着头皮还是要上。

好在有着师兄指示,让我去学习网路爬虫,说网路爬虫可以搞定“我想要的数据”。
为了“活”下去,我决定放手一搏,但在学习准备阶段我就碰着了我的第一个“爬虫难题”。

php和java爬虫技巧_初识爬虫的那天我选择了Java

决定要用网络爬虫去采集数据,面临一个选择便是:是用Java还是Python写网络爬虫呢?对付一个新手,我翻阅了网上各种比拟的帖子,各有各的不雅观点,个中不少说Python上手随意马虎,写起来方便。
但终极我还是选择了Java,有以下几点缘故原由:

php和java爬虫技巧_初识爬虫的那天我选择了Java
(图片来自网络侵删)

1. Java火了很多年,而且依旧很火,其生态也比较完善。
目前,很多大公司的系统皆采取Java设计,足以解释其强大之处。
把Java学好了,足够让我找一份不错的事情,即入职大厂。

2. Java严谨规范,对付大型工程、大型程序,如果不规范不严谨掩护岂不随意马虎出问题。

3. 对网络爬虫而言,JAVA中也有很多大略易用的类库(如Jsoup、Httpclient等),同时还存在不少易于二次开拓的网络爬虫框架(Crawler4J、WebMagic等)。

4. 曾在一个帖子中看到,“天下上99%的人都会选择一条随意马虎走的大路,由于人都喜好安逸。
这也是人的大脑的思维办法决定的,由于大脑的义务是为了让你生存,而不是求知。
但成功是总是属于那1%的人,这类人是坚持让大脑做不愿意做的事的人——求知”。
哎,这在我看来,还真有一定的道理。
如果励志想成为一名真正的程序员,建议先学习Java。
在此根本上,如果你对Python感兴趣,也是可以快速上手的。

1 网络爬虫流程

学习网络爬虫之前,先看了普通网络爬虫大致流程,如下图所示:

紧张包括5个步骤:

1. 选取部分种子URL(或初始URL),将其放入待采集的行列步队中。
如在Java中,可以放入List、LinkedList以及Queue中。

2. 判断URL行列步队是否为空,如果为空则结束程序的实行,否则实行步骤3。

3. 从待采集的URL行列步队中取出一个URL,获取URL对应的网页内容。
在此步骤须要利用HTTP相应状态码(如200和403等)判断是否成功获取到了数据,如相应成功则实行解析操作;如相应不堪利,则将其重新放入待采集URL行列步队(把稳这里须要过滤掉无效URL)。

4. 针对相应成功后获取到的数据,实行页面解析操作。
此步骤根据用户需求获取网页内容中的部分字段,如汽车论坛帖子的id、标题和揭橥韶光等。

5. 针对步骤4解析的数据,实行数据存储操作。

2 须要节制的Java根本知识

在利用Java构建网络爬虫时,须要节制很多Java方面的根本知识。
例如,Java中基本的数据类型、Java中的数组操作、判断语句的利用、凑集操作、工具和类的利用、String类的利用、日期和韶光的处理、正则表达式的利用、Maven工程的创建、多线程操作、日志的利用等。

看着知识点很多,但如果将其放入到详细的网络爬虫实战项目中去学习,会创造很大略。
下面,我举两个例子。

在网络爬虫中,我们常常须要将待采集的URL放到凑集中,然后循环遍历凑集中的每个URL去采集数据。
比如,我们利用Queue凑集操作:

Queue<String> urlQueue = new LinkedList<String>(); //添加要采集的URL urlQueue.offer("https://ccm.net/download/?page=1"); urlQueue.offer("https://ccm.net/download/?page=2"); urlQueue.offer("https://ccm.net/download/?page=3"); boolean t = true; while (t) { //如果行列步队为空,循环结束 if( urlQueue.isEmpty() ){ t = false; }else { //取出每个URL String url = urlQueue.poll(); //获取HTML String getHtml = ...; //判断是否成功要求到HTML if (成功要求到HTML) { //解析数据 ...; }else { //如果网页存在但没有要求到数据,重新添加到行列步队中 urlQueue.offer(url); } } }

其余,在采集数据时,不同网站的韶光利用格式可能不同。
而不同的韶光格式,会为数据存储以及数据处理带来一定的困难。
例如,下图为某汽车论坛中韶光利用的格式,即“yyyy-MM-dd”和“yyyy-MM-dd HH:mm”两种类型。

下图为某新闻网站中的韶光利用格式“yyyy-MM-dd HH:mm:ss”。

再如,艺术品网站deviantart的韶光利用的是UNIX韶光戳的形式。

针对汽车论坛中的“yyyy-MM-dd”和“yyyy-MM-dd HH:mm”格式,可以统一转化成“yyyy-MM-dd HH:mm:ss”格式,以方便数据存储以及后期数据处理。
此时,可以写个方法将将字符串类型的韶光标准化成指定格式的韶光。
如下程序:

import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class TimeTest { public static void main(String[] args) { System.out.println(parseStringTime("2016-05-19 19:17", "yyyy-MM-dd HH:mm","yyyy-MM-dd HH:mm:ss")); System.out.println(parseStringTime("2018-06-19", "yyyy-MM-dd","yyyy-MM-dd HH:mm:ss")); } / 字符型韶光格式标准化方法 @param inputTime(输入的字符串韶光),inputTimeFormat(输入的格式),outTimeFormat(输出的格式). @return 转化后的韶光(字符串) / public static String parseStringTime(String inputTime,String inputTimeFormat, String outTimeFormat){ String outputDate = null; try { //日期格式化及解析韶光 Date inputDate = new SimpleDateFormat(inputTimeFormat).parse(inputTime); //转化成新的形式的字符串 outputDate = new SimpleDateFormat(outTimeFormat).format(inputDate); } catch (ParseException e) { e.printStackTrace(); } return outputDate; }}

针对UNIX韶光戳,可以通过如下方法处理:

//将unix韶光戳转化成指定形式的韶光 public static String TimeStampToDate(String timestampString, String formats) { Long timestamp = Long.parseLong(timestampString) 1000; String date = new SimpleDateFormat(formats, Locale.CHINA).format(new Date(timestamp)); return date; }

3 HTTP协议根本与网络抓包

做网络爬虫,还须要理解HTTP协议干系的内容,即要清楚数据是怎么在做事器和客户端传输的。

详细须要理解的内容包括:

1. URL的组成:如协议、域名、端口、路径、参数等。

2. 报文:分为要求报文和相应报文。
个中,要求报文包括要求方法、要求的URL、版本协议以及要求头信息。
相应报文包括要求协议、相应状态码、相应头信息和相应内容。
相应报文包括要求协议、相应状态码、相应头信息和相应内容。

3. HTTP要求方法:在客户端向做事器发送要求时,须要确定利用的要求方法(也称为动作)。
要求方法表明了对URL指定资源的操作办法,做事器会根据不同的要求方法做不同的相应。
网络爬虫中常用的两种要求方法为GET和POST。

4. HTTP状态码:HTTP状态码由3位数字组成,描述了客户端向做事器要求过程中发生的状况。
常利用200判断网络是否要求成功。

5. HTTP信息头:HTTP信息头,也称头字段或首部,是构成HTTP报文的要素之一,起到通报额外主要信息的浸染。
在网络爬虫中,我们常利用多个User-Agent和多个referer等要求头来仿照人的行为,进而绕过一些网站的防爬方法。

6. HTTP相应正文:HTTP相应正文(或HTTP相应实体主体),指做事器返回的一定格式的数据。
网络爬虫中常碰着须要解析的几种数据包括:HTML/XML/JSON。

在开拓网络爬虫时,给定 URL,开拓者必须清楚客户端是怎么向做事器发送要求的,以及客户端要求后做事器返回的数据是什么。
只有理解这些内容,开拓者才能在程序中拼接URL,针对做事返回的数据类型设计详细的解析策略。
因此,网络抓包是实现网络爬虫必不可少的技能之一,也是网络爬虫开拓的出发点。

本文作者钱洋博士所著新书《网络数据采集技能:Java网络爬虫实战》现已上市。
系统地先容了网络爬虫的理论知识和根本工具,并且选取范例网站,采取案例讲解的办法先容网络爬虫中涉及的问题,以增强大家的动手实践能力。

本书时候海内少见的Java爬虫宝典。
与Python措辞比较,利用Java措辞进行网络数据采集,具有采集效率更高、框架性能更好、敏捷易用等优点,而且针对大型搜索引擎系统的数据采集事情更多利用Java措辞,故本书值得大家学习。

(扫码理解本书详情)

█ 关 于 作 者

钱洋

合肥工业大学管理科学与工程系博士、CSDN博客专家。
作为技能职员参与过多个横向、纵向学术课题,卖力数据采集系统的设计与开拓事情。
在CSDN(博客名称:HFUT_qianyang)上撰写了多篇关于数据采集、自然措辞处理、编程措辞等领域的原创博客。

姜元春

合肥工业大学教授、博士生导师。
长期从事电子商务、商务智能、数据采集与挖掘等方面的理论研究与传授教化事情。
先后主持过国家自然科学基金精良青年科学基金项目、国家自然科学基金重大研究操持造就项目、国家自然科学基金青年科学基金项目、教诲部人文社科青年基金项目、阿里巴巴青年学者支持操持、CCF-腾讯犀牛鸟基金项目等课题的研究事情。

█ 大 咖 推 荐

陈国青 / 清华大学教授、博士生导师程学旗 / 中国科学院打算技能研究所研究员、博士生导师卓训方 / 上海数据交易中央项目总监刘业政 / 合肥工业大学教授博士生导师

█ 本书内容构造

第 1 ~3 章

这3 章重点先容与网络爬虫开拓干系的根本知识,个中包括网络爬虫的事理、Java 根本知识和HTTP 协议等内容。

第 4~6 章

这3 章分别从网页内容获取、网页内容解析和网络爬虫数据存储3 个方面先容网络爬虫开拓过程中所涉及的一系列技能。
在这3 章中,涉及很多开源工具的利用,如Jsoup、HttpClient、HtmlCleaner、Fastjson、POI3 等。

第 7 章

本章利用详细的实战案例,讲解网络爬虫开拓的流程。
通过对本章的学习,读者可以轻松开拓Java 网络爬虫。

第 8 章

针对一些繁芜的页面,如动态加载的页面(实行JavaScript 脚本),本章先容了一款实用的工具——Selenium WebDriver。

第 9 章

本章重点先容了3 种比较盛行的Java 网络爬虫开源框架,即Crawler4j、WebCollector 和WebMagic。
读者可根据数据采集需求,自行开拓支持多线程采集、断点采集、代理切换等功能的网络爬虫项目。

▶ 博文菌●互动韶光 ◀

Java、Python、Js、C、PHP、Shell、Ruby等等措辞都可以实现爬虫,你考试测验过哪种措辞呢?欢迎在留言区与大家分享!

标签:

相关文章

执业药师试卷代码解码药师职业发展之路

执业药师在药品质量管理、用药安全等方面发挥着越来越重要的作用。而执业药师考试,作为进入药师行业的重要门槛,其试卷代码更是成为了药师...

PHP教程 2025-02-18 阅读1 评论0

心灵代码主题曲唤醒灵魂深处的共鸣

音乐,作为一种独特的艺术形式,自古以来就承载着人类情感的表达与传递。心灵代码主题曲,以其独特的旋律和歌词,唤醒了无数人的灵魂深处,...

PHP教程 2025-02-18 阅读1 评论0

探寻福建各市车牌代码背后的文化内涵

福建省,地处我国东南沿海,拥有悠久的历史和丰富的文化底蕴。在这片充满魅力的土地上,诞生了许多具有代表性的城市,每个城市都有自己独特...

PHP教程 2025-02-18 阅读1 评论0

探寻河北唐山历史与现代交融的城市之光

河北省唐山市,一座地处渤海之滨,拥有悠久历史和独特文化的城市。这里既是古丝绸之路的起点,也是中国近代工业的发源地。如今,唐山正以崭...

PHP教程 2025-02-18 阅读1 评论0