【需求】
1.爬取猫眼电影http://m.maoyan.com/网页,要求使用JAVA
2.将影片ID、影片名称,插入数据库
【新建数据库】
需要注意的点:
1. 如图,尽量不要动information_schema和mysql两个系统库。防止出现不必要的问题。2. 我们这里可以使用test库。但本例为了杜绝中文乱码的诸多问题,我们自己新建了一个新库ttt。新建的过程中格外注意,把编码格式都设置为utf8。
【中文乱码的问题解决】
问题:我们获取到了需要的信息。但是中文插入数据库发生乱码,都是???或者乱七八糟的字符。
解决方式:
1. 新建一个编码格式为utf8 的新数据库ttt。
2. 将数据库连接的链接改为:String url = "jdbc:mysql://localhost:3306/ttt?characterEncoding=utf8";
即,需要在链接最后加编码格式的限制。
3. String data = new String(getData, "utf-8");
即,保证所有的地方编码格式都设置为utf-8
【JAVA爬虫思路分析】
写JAVA爬虫之前,我们回顾一下之前我们用Python写爬虫的经验。
整个爬虫的逻辑是什么样子的?虽然使用的语言发生变化,但其中的逻辑是相通的,不会有太大变化。
即:
1. 通过网址访问网页,拿到 HTML页面数据或Json数据 等形式的反馈。
2. 对反馈回来的数据进行分析,从中筛选出自己想要的数据。
3. 最后对数据进行处理。如插入数据库等。
这就是一个完整的爬虫。
【写爬虫之前的准备】
一台新的电脑。开发之前要做的准备有:
1. 配置开发环境
2. 安装必要的软件
如下图:
如图,从上之下依次为:
两个JDK、 myEclipse10、mysql、Navicat、Eclipse的svn插件、TortoiseSVN。
依次安装,打开安装文件直接跟着向导走就可以,不需要任何的破解步骤。
唯一需要注意的是它们各自的配置。依次为:
JDK环境变量的配置、myEclipse的JDK设置。
其中myEclipse的JDK设置如下图:
【开始写爬虫】
首先需要零碎的说一些概念性的基础知识:
1. 【导入包相关 】
不需要手动去写import ,手动来引入需要的类。Eclipse可以自动提示,自动导入。或者通过快捷键CTRL + SHIFT + O。
2. 【jar包是什么】
jar包中封装了很多我们编程需要的类,我们编程时,如果需要某个类,某个方法,是要去jar包中拿的。
这就是为什么说,我需要什么jar包才弄什么jar包。
3. 【jar包的使用】
我们新建一个Java工程的时候是没有lib文件夹的,我们需要什么jar包,就把需要的jar包拷贝到这个lib文件夹中待用。
然后如下图进行操作:
这样就能把jar包放入Referenced Libraries中,也就能在代码中正常使用了。
最终成品的工程目录结构如下图:
是最普通的Java工程。核心代码在Test.java文件中。
这里先贴出核心代码:
package com.parity.model;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.http.client.HttpClient;
public class Test {
public static void main(String[] args) throws IOException, SQLException {
URL url = new URL("http://m.maoyan.com/movie/list.json?type=hot&offset=0&limit=1000");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
InputStream inputStream = conn.getInputStream(); //通过输入流获得网站数据
byte[] getData = readInputStream(inputStream); //获得网站的二进制数据
String data = new String(getData, "utf-8"); //拿到网页内容
//System.out.println(data);
JSONObject jsonObject = JSONObject.fromObject(data);
String name = jsonObject.getString("data");
System.out.println("data is: "+name);
JSONObject jsonObject1 = JSONObject.fromObject(name);
JSONArray movies = jsonObject1.getJSONArray("movies");
for(int i=0;i
代码的整体逻辑就是上文阐述的 爬虫思路分析 所说的。