说到爬虫,在做这个项目之前我也是一头雾水,不知道到底这是个什么鬼,就是感觉很牛逼的一个东西(听起来很高大上),但是自己上手之后才明白,所有的项目基本上都差不多,只要你投入精力认真的去做了,或多或少都会有一些收获,当然肯定很多人会问的一个问题就是python爬虫不是更好吗,为什么要用java,我想说的是语言本身没什么,主要是思想,就是你处理这件事情或者业务的逻辑和方式只要比别人的好,那就是好的,因为能实现爬虫的语言多了去了,肯定是学不完的。
第一步,你要找打你需要爬取的数据源,也就是说你要爬取数据在网络上所在额度位置,我们这里爬取的数据是足球相关的信息,因为我们这个项目做的是资料库相关的数据,合作方是球探数据,虽然买了球探的接口,可以直接获取数据,但是有些我们需要的数据球探提供的接口中并没有,所以我们需要自己去获取这些数据。当然涉及到版权问题的话,请通知博主修改本博客,本博客完全是从技术和业务角度出发,没有恶意攻击球探数据或从中获取利益,本博客也只是共学习参考,并无商业价值。
首先我们访问一下球探数据的资料库首页,修改该页面的语言为自己需要的简繁或英文等。点击英国,去看英超的资料库,然后看切尔西球队对应的信息,然后打开浏览器的开发者平台的network部分,点击空白处然后刷新当前页面,然后会看到一个名字叫team36.js?version=yyyyMMddHH的js文件,然后获取这个地址,这个地址copy一下去访问,你最多访问一次,不可能查过两次就会爆出50x Server Error !服务器报错了。
数据地址找到了就是http://zq.win007.com/jsData/teamInfo/team36.js?version=yyyyMMddHH ,然后我们就需要开视爬去数据了,我们用的是springBoot(maven工程),主要爬去工具是HttpClient,当然别的Http求情工具也是可以的。
主要maven依赖
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.3</version> </dependency>
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.43</version> </dependency>
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.11.2</version> </dependency>
这里是对应的爬去代码,这只是一个简单的入门,并没有什么思想,主要是先把数据拿下来,就这样拿。
import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; import org.apache.http.HttpEntity; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.junit.Test; public class SpiderTeamInfo { @Test public void spiderTeamInfo() throws URISyntaxException, ClientProtocolException, IOException { CloseableHttpClient client = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(); URI uri = new URI("http://zq.win007.com/jsData/teamInfo/team36.js?version=2018041415"); httpGet.setURI(uri); httpGet.addHeader("Accept-Charset", "GBK,utf-8"); httpGet.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); httpGet.addHeader("Accept-Language", "zh-CN,zh"); httpGet.addHeader("Cookie", ""); //在哪一页访问到的这个js httpGet.addHeader("referer","http://zq.win007.com/cn/team/Summary/24.html"); httpGet.addHeader("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.160 Safari/537.22"); HttpEntity entity = client.execute(httpGet).getEntity(); String rspStr = getRspStr(entity); System.out.println(rspStr); } private String getRspStr(HttpEntity entity) throws UnsupportedOperationException, IOException { if(null==entity) { return null; } int leng = 0; byte[] bytes = new byte[1024]; InputStream in = entity.getContent(); BufferedInputStream bis = new BufferedInputStream(in); StringBuilder sb = new StringBuilder(); while(-1!=(leng = bis.read(bytes))) { sb.append(new String(bytes,0,leng,"UTF-8")); } return sb.toString(); } }
这就是爬去到的数据。ok , this is spider fisrt step. 这样的话,java爬虫就算是刚刚入门,本文这是入门,HttpClient可以池化,实际生产中肯定不会像上面这样写代码,第一步不是最重要的,最重要的解析爬虫,而不是爬去数据。
写在最后:本博客出发的角度是技术,而不是盗取信息,如果说损害到相关网站或公司利益,请通知博主修改本文。提醒:爬去到的数据是有限的,我们如果说需要这些数据的话还是建议购买接口,相对来说更加的便于开发,尊重知识产权,从你我做起。