最近收到一个淘宝页面商品信息的需求,之前页弄过类似的需求;一开始想着使用python等爬虫工具,不过介于淘宝对爬虫机制的限制,还是果断放弃了;
然后选择了使用码栈这个神器,虽然他很多功能都需要收费,最关键的最后的数据结果的导出功能要收费;直接哭晕;但是身为程序员没有绕不过去的砍;请允许我慢慢道来;
下面简单介绍下我的开发:
这是我们整个可视化流程的截图,大概逻辑页很简单,
1、先遍历所有页面数(可以自动获取,也可以手动写,)
2、然后拼接url 基础URL+页数
3、。。。

4、对于很多不想付钱的老铁,遇到下面的问题是很是坑爹的

5、我的解决方法就算,通过get请求把最后的结果通过网络的方式传输出去;这方法对于程序员来说其实很简答,随随便便开个服务就能解决;但对于不是程序员的老铁可能比较困难了,可能又是一堆的折腾;
```package httpServer2;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Map;
public class HTTPServer {
public static void main(String[] args) {
try {
ServerSocket ss=new ServerSocket(8888);
while(true){
Socket socket=ss.accept();
BufferedReader bd=new BufferedReader(new InputStreamReader(socket.getInputStream()));
/**
* 接受HTTP请求
*/
String requestHeader;
int contentLength=0;
while((requestHeader=bd.readLine())!=null&&!requestHeader.isEmpty()){
//System.out.println(requestHeader);
/**
* 获得GET参数
*/
if(requestHeader.startsWith("GET")){
int begin = requestHeader.indexOf("/?")+2;
int end = requestHeader.indexOf("HTTP/");
String condition=requestHeader.substring(begin, end);
System.out.println("GET参数是:"+condition);
String params = condition.substring(condition.indexOf("?") + 1, condition.length());
String[] aaa = params.split("&");
String ccc = "";
for(int i=0;i<aaa.length;i++) {
String[] bbb = aaa[i].split("=");
bbb[1] = java.net.URLDecoder.decode(bbb[1], "utf-8");
if(i==0) {
ccc = bbb[1];
}else {
ccc += ","+bbb[1];
}
}
HTTPServer.filewrite(ccc,"outData.csv");
}
}
StringBuffer sb=new StringBuffer();
if(contentLength>0){
for (int i = 0; i < contentLength; i++) {
sb.append((char)bd.read());
}
System.out.println("POST参数是:"+sb.toString());
}
//发送回执
PrintWriter pw=new PrintWriter(socket.getOutputStream());
pw.println("HTTP/1.1 200 OK");
pw.println("Content-type:text/html");
pw.println();
pw.println("<h1>访问成功!</h1>");
pw.flush();
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void filewrite(String str, String ResultfilePath) throws IOException{
try {
// 打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
FileWriter writer = new FileWriter(ResultfilePath, true);
writer.write(str+System.getProperty("line.separator"));
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
这java半的 简易Http服务; 可以接受GET服务,然后已csv的格式写入到文件中;-一切大功搞成;
网友评论