第一篇点击此链接
写爬虫程序,大家都知道python,其实还有java可以写爬虫,由于博主是大数据分析专业的,而大数据很多框架都和java有关系,所以本篇的代码实现是java。但是别走,此处提供的是思路,你把我的思路用python实现也是可以的。
这里我们需要的依赖有
<dependency>
<groupId>net.sourceforge.htmlunitgroupId>
<artifactId>htmlunitartifactId>
<version>2.49.1version>
dependency>
<dependency>
<groupId>org.jsongroupId>
<artifactId>jsonartifactId>
<version>20210307version>
dependency>
<dependency>
<groupId>commons-iogroupId>
<artifactId>commons-ioartifactId>
<version>2.8.0version>
dependency>
这里我们需要的导包有
//来自于htmlunit依赖
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.WebResponse;
//来自于commons-io依赖
import org.apache.commons.io.FileUtils;
//来自于org.json依赖
import org.json.CDL;
import org.json.JSONArray;
import org.json.JSONObject;
//java自己的包
import java.io.File;
import java.io.IOException;
//使用指定的BrowserVersion创建web客户端实例。
WebClient webClient = new WebClient(BrowserVersion.CHROME);
String url = "http://push2his.eastmoney.com/api/qt/stock/kline/get?fields1=f1%2Cf2%2Cf3%2Cf4%2Cf5%2Cf6&fields2=f51%2Cf52%2Cf53%2Cf54%2Cf55%2Cf56%2Cf57%2Cf58%2Cf59%2Cf60%2Cf61&klt=101&fqt=1&secid=0.000003&beg=0&end=20500000";
//方便的方法来构建一个URL并将其加载到当前的WebWindow中
Page page = webClient.getPage(url);
//返回最初用于创建此页的web响应
WebResponse response = page.getWebResponse();
//使用服务器响应中指定的字符集/编码,以字符串形式返回响应内容。
String json = response.getContentAsString();
输出一下,仅作测试,待会删掉
System.out.println(json);
根据观察,我们需要的数据藏在data对象的klines对象的数组
那么我们先把data提炼出来,在刚才代码的基础上,再追加以下代码(你先了解json的语法,才能理解以下代码)
//创建JSONObject,把整个json传进去
JSONObject jsonObject = new JSONObject(json);
//获取JSON中的对象
JSONObject mydata = jsonObject.getJSONObject("data");
//输出一下,仅作测试,待会删掉
System.out.println(mydata);
我们离klines只剩一点点了
//获取对象中的数组
JSONArray myjsonarry = mydata.getJSONArray("klines");
将这些json数组转换成字符串数组
// CDL支持JSON和逗号分隔列表之间的转换
// String de = CDL.rowToString(myjsonarry);
// 这里你可以输出以下看一下de是什么玩意
// 对字符串进行切片
String[] csv = CDL.rowToString(myjsonarry).split("\",\"");
//测试,记得删
for (String buffer:csv) {
System.out.println(buffer);
}
然后你会发现csv[0]和csv[csv.length-1]这两个数组元素的头和尾还有个"
再次清洗
String[] buffer2 = csv[0].split("\"");
csv[0] = buffer2[1];
String[] buffer3 = csv[csv.length - 1].split("\"");
csv[csv.length - 1] = buffer3[0];
//测试,记得删掉
for (String buffer:csv) {
System.out.println(buffer);
}
for (String buffer:csv) {
//第一个参数,创建一个文件
//第二个参数,将字符串写入文件
//第三个参数,这个文件的字符集/编码
//第四个参数,是否是追加(这里填是),因为我是一个元素一个元素的写入
FileUtils.writeStringToFile(new File("D://testdemo1.csv"), buffer+"\n","UTF-8",true);
}
public class spiderdemo {
public static void main(String[] args) throws IOException, InterruptedException {
WebClient webClient = new WebClient(BrowserVersion.CHROME);
String url = "http://push2his.eastmoney.com/api/qt/stock/kline/get?fields1=f1%2Cf2%2Cf3%2Cf4%2Cf5%2Cf6&fields2=f51%2Cf52%2Cf53%2Cf54%2Cf55%2Cf56%2Cf57%2Cf58%2Cf59%2Cf60%2Cf61&klt=101&fqt=1&secid=0.000003&beg=0&end=20500000";
Page page = webClient.getPage(url);
WebResponse response = page.getWebResponse();
String json = response.getContentAsString();
JSONObject jsonObject = new JSONObject(json);
JSONObject mydata = jsonObject.getJSONObject("data");
JSONArray myjsonarry = mydata.getJSONArray("klines");
// CDL支持JSON和逗号分隔列表之间的转换
// String de = CDL.rowToString(myjsonarry);
// 这里你可以输出以下看一下de是什么玩意
// 对字符串进行切片
String[] csv = CDL.rowToString(myjsonarry).split("\",\"");
String[] buffer2 = csv[0].split("\"");
csv[0] = buffer2[1];
String[] buffer3 = csv[csv.length - 1].split("\"");
csv[csv.length - 1] = buffer3[0];
for (String buffer : csv
) {
FileUtils.writeStringToFile(new File("D://testdemo1.csv"), buffer+"\n","UTF-8",true);
}
webClient.close();
}
}
这里没有表头,你不知道这些字段是什么对吧?