java爬虫入门篇

Java爬虫入门篇(Spider Begin)

        说到爬虫,在做这个项目之前我也是一头雾水,不知道到底这是个什么鬼,就是感觉很牛逼的一个东西(听起来很高大上),但是自己上手之后才明白,所有的项目基本上都差不多,只要你投入精力认真的去做了,或多或少都会有一些收获,当然肯定很多人会问的一个问题就是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可以池化,实际生产中肯定不会像上面这样写代码,第一步不是最重要的,最重要的解析爬虫,而不是爬去数据。

        写在最后:本博客出发的角度是技术,而不是盗取信息,如果说损害到相关网站或公司利益,请通知博主修改本文。提醒:爬去到的数据是有限的,我们如果说需要这些数据的话还是建议购买接口,相对来说更加的便于开发,尊重知识产权,从你我做起。

扫描二维码关注公众号,回复: 1050456 查看本文章



        

猜你喜欢

转载自blog.csdn.net/qq1437715969/article/details/79937632