php正则函数抓取网页连接(2019独角兽企业重金招聘Python工程师标准(gt;gt))

优采云 发布时间: 2022-01-07 20:01

  php正则函数抓取网页连接(2019独角兽企业重金招聘Python工程师标准(gt;gt))

  2019独角兽企业重磅Python工程师招聘标准>>>

  

  在最近的一个项目中,有一个需求:用户要求我们在地图上实时显示某些景点的人数,但他们没有给我们提供数据接口。但是,最新的数据可以从网络上获取并每小时更新一次。于是经理给我安排了一个功能,实时从网页中获取数据。

  既然是网页,肯定有很多无用的数据,所以需要使用正则表达式过滤掉自己需要的数据。

  不得不说正则表达式比子字符串好用多了,效率也很高。让我们在下面分享我的这段代码:

  /**

* 从网站获取日期信息

*

* @Title: getDate

* @Date : 2014-8-12 上午09:42:26

* @return

*/

private String getDate() {

// 从网站抓取数据

String table = catchData();

String date = "";

// 使用正则表达式,获取对应的数据

Pattern places = Pattern.compile("(<p align=\"center\">)([^\\s]*)");

Matcher matcher = places.matcher(table);

while (matcher.find()) {

System.out.println(matcher.group(2));

date = matcher.group(2);

}

return date;

}

/**

* 从网站抓取数据(未经处理)

*

* @Title: getData

* @Date : 2014-8-12 上午09:34:30

* @return

*/

@SuppressWarnings("unchecked")

private String catchData() {

String table = "";

try {

Map map = new HashMap();

map.put("a", "1");// 莫删,否则报错

table = AsyncRequestUtil.getJsonResult(map, "http://s.visitbeijing.com.cn/flow.php");

} catch (Exception e) {

e.printStackTrace();

}

return table;

}

  [AsyncRequestUtil.java]

  package com.zhjy.zydc.util;

import java.util.Map;

/**

* 异步请求数据

* @author : Cuichenglong

* @group : tgb

* @Version : 1.00

* @Date : 2014-5-28 上午09:54:20

*/

public class AsyncRequestUtil {

/**

* 异步请求数据

* @Title: getJsonResult

* @param map

* @param strURL

* @return

*/

public static String getJsonResult(Map map, String strURL)throws Exception {

/** 跨域登录,获取返回结果 **/

String result = null;

result = UrlUtil.getDataFromURL(strURL, map);

if (result!=null && result.startsWith("null{")) {

result = result.substring("null".length());

}

return result;

}

}

  【UrlUtil .java】

<p>package com.zhjy.zydc.util;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.UnsupportedEncodingException;

import java.net.URL;

import java.net.URLConnection;

import java.net.URLDecoder;

import java.net.URLEncoder;

import java.util.ArrayList;

import java.util.Enumeration;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

/**

* url跨域获取数据

* @author : Cuichenglong

* @group : Zhong Hai Ji Yuan

* @Version : 1.00

* @Date : 2014-5-27 下午04:14:26

*/

public final class UrlUtil {

/**

* 根据URL跨域获取输出结果

* @Title: getDataFromURL

* @param strURL 要访问的URL地址

* @param param 参数

* @return 结果字符串

* @throws Exception

*/

public static String getDataFromURL(String strURL, Map param) throws Exception{

URL url = new URL(strURL);

URLConnection conn = url.openConnection();

conn.setDoOutput(true);

conn.setConnectTimeout(5000); //允许5秒钟的延迟:连接主机的超时时间(单位:毫秒)

conn.setReadTimeout(5000); //允许5秒钟的延迟 :从主机读取数据的超时时间(单位:毫秒)

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());

final StringBuilder sb = new StringBuilder(param.size()

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线