本文转载自微信公众号《Java极客技术》,作者鸭血范。转载本文请联系Java极客技术公众号。网络爬虫技术早在万维网诞生时就已经出现。今天我们就一起揭开它神秘的面纱!一、总结说起网络爬虫,相信大家都不陌生。该程序根据一定的规则从互联网上抓取网页,然后从中获取有价值的数据。随便上网搜一下,排在最前面的基本上就是pyhton教程的介绍了。确实,pyhton在处理网页方面具有开发简单、方便、性能高等优点!但是我们的java还不错。在处理复杂网页方面,当需要解析网页内容生成结构化数据或者精细分析网页内容时,java可以说是更胜一筹!下面以爬取全国、省、市信息为例,使用java技术实现。流程主要分为三部分:第一步:目标网页分析第二步:编写爬虫程序分析关键数据第三步爬取:将抓取的数据写入数据库废话不多说,直接打开!2.网页分析网络爬虫其实并不是什么难的技术,但是需要掌握的技术内容很多,只知道java技术是远远不够的,还需要熟悉html页面属性!以爬取国家、省市信息为例,我们可以直接在百度上搜索国家、省市,点击进入国家行政区划信息查询平台。在民政数据菜单栏下,找到最新的行政区号公示栏。点击进入,显示结果如下!可以清楚的看到这是我们要获取省市代码的网页信息。可能有同学会问,直接这样做合法吗?既然国家已经公示了,我们就可以直接使用,完全合法!而且,国家、省、市代码是一个公共字典,在很多业务场景中都是必不可少的!当我们找到目标网页后,我们首先要做的就是分析网页,打开浏览器调试器,我们就可以清楚的看到是一张数据组成的表格。熟悉html标签的同学一定已经知道它的组成原理。其实table是一个非常简单的html标签,主要由tr和td组成,其中tr代表行,td代表列。例如,使用table标签绘制学生表。代码如下:
显示结果如下:了解了table标签后,我们将对网页进行详细分析。首先观察整个内容,不难看出,市级以上(含市级),加粗加粗,区县级地区都是套路!这个现象其实是样式标签引起的CSS来控制,点击北京找到对应的代码位置。从图中我们可以清楚的看到市级对应的样式类是xl7030796,区县级对应的样式类是xl7130796。另外,我们继续看省市级的区别!可以明显看出,市级信息比省级信息多了一个span占位符标签。因此,我们可以得出以下结论:省级信息,样式标签为xl7030796市级信息,样式标签为xl7030796,同时包含span占位符标签区域或县级信息,样式标签为xl7130796,等会通过这些常规信息从网页信息中抓取省、市、区信息。3、编写爬虫程序3.1.创建项目在maven项目的基础上新建一个java项目,在pom.xml项目中引入如下jar包!
org.jsoupjsoup1.11.23.2。编写爬虫程序,首先创建一个实体数据类,用于存储抓取的数据publicclassChinaRegionsInfo{/***行政区域编码*/privateStringcode;/***行政区域名称*/privateStringname;/***行政区域类型,1:province,2:city,3:districtorcounty*/privateIntegertype;/***上级行政区编码*/privateStringparentCode;//省略get,set}然后我们来写爬虫代码,把抓取的数据封装到entityclass//要抓取的网页地址privatestaticfinalStringURL="http://www.mca.gov.cn//article/sj/xzqh/2020/202006/202008310601.shtml";publicstaticvoidmain(String[]args)throwsIOException{List
regionsInfoList=newArrayList<>();//抓取网页信息Documentdocument=Jsoup.connect(URL).get();//获取真实数据体Elementelement=document.getElementsByTag("tbody").get(0);StringprovinceCode="";//省代码StringcityCode="";//市代码if(Objects.nonNull(e元素)){元素=element.getElementsByTag("tr");for(inti=3;i