jsoup实战之抓取大众点评网区域省份城市信息

时间:2022-10-31 11:15:43

需求:从大众点评网抓取 所有区域,省份,城市信息
所使用技术:manve+jsoup.1.7.3+httpclient.4.3.3


 

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>chpro</groupId>  <artifactId>souchisouwan-example</artifactId>  <packaging>war</packaging>  <version>0.0.1-SNAPSHOT</version>  <name>souchisouwan-example Maven Webapp</name>  <url>http://maven.apache.org</url>  <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope>    </dependency>        <!-- httpclient -->    <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.3.3</version></dependency>        <!-- jsoup -->    <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.7.3</version></dependency>  </dependencies>  <build>    <finalName>souchisouwan-example</finalName>  </build></project>


JsoupAction类
package com.souchisouwan.example;

import java.util.ArrayList;
import java.util.List;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.souchisouwan.util.HttpUtil;

/**
* 抓取大众点评网区域省份城市信息
* @author Administrator
*
*/
public class JsoupAction {
public static void main(String[] args)throws Exception {
String uri = "http://www.dianping.com/citylist";


String html = HttpUtil.httpPost(uri);
//System.out.println(html);

//抓取地区
Document doc = Jsoup.parse(html);//解析HTML字符串返回一个Document实现
Elements links = doc.select(".root");
for(Element link:links){
String area = link.select(".vocabulary").html();//获得地区
Elements shenfens = link.select(".terms");//获得省份
System.out.println(area);//打印地区
for(Element sf:shenfens){
String shenfen = sf.select("dt").html();
System.out.println("\t"+shenfen);//打印省份

Elements shiqus = sf.select("dd>a");
for(Element sq:shiqus){
String sqtemp = sq.html();
String pytemp = sq.attr("href").substring(1);
System.out.println("\t\t"+(sqtemp.indexOf("strong")==-1?sqtemp:sqtemp.substring(8,sqtemp.length()-9))+" "+pytemp);
}

//获取更多
String gengduo = sf.select("dd>span").last().attr("data-v");
List<String> gengduos = more(gengduo);
for(String gd:gengduos){
System.out.println("\t\t"+gd);
}
}

//System.out.println(link.toString());
}
}

//获取更多操作
public static List<String> more(String index)throws Exception{
List<String> result = new ArrayList<String>();
String uri = "http://www.dianping.com/ajax/json/index/citylist/getCitylist?_nr_force=122&do=getbyprovince&pID="+index;

String html = HttpUtil.httpPost(uri);

Document doc = Jsoup.parse(html);//解析HTML字符串返回一个Document实现
Elements links = doc.select("a");
for(Element link:links){
String temp = link.html();
String pytemp = link.attr("href");
result.add(temp.substring(0,temp.indexOf("&")));
}
return result;
}
}

HttpUtil类

package com.souchisouwan.util;

import java.io.IOException;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

/**
* http帮助类
* @author Administrator
*
*/
public class HttpUtil {
private static HttpClient client = new DefaultHttpClient();
/**
* post请求
* @param url 请求地址
* @param param 参数
* @return
*/
public static String httpPost(String url,Map<String,String> param){
return null;
}

/**
* post请求
* @param url 请求地址
* @return
*/
public static String httpPost(String url){

HttpPost post = new HttpPost(url);
String result = "";
try {
HttpResponse res = client.execute(post);
result = EntityUtils.toString(res.getEntity());
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}

/**
* get请求
* @param url 请求地址
* @return
*/
public static String httpGet(String url){
return null;
}

/**
* get请求
* @param url 请求地址
* @param param 参数
* @return
*/
public static String httpGet(String url,Map<String,String> param){
return null;
}

/**
* https post请求
* @param url 请求地址
* @param param 参数
* @return
*/
public static String httpsPost(String url,Map<String,String> param){
return null;
}

/**
* https post请求
* @param url 请求地址
* @param param 参数
* @return
*/
public static String httpsPost(String url){
return null;
}

/**
* https get请求
* @param url
* @return
*/
public static String httpsGet(String url){
return null;
}
}

控制台打印的部分结果:

华北东北
河北
石家庄 shijiazhuang
保定 baoding
秦皇岛 qinghuangdao
邯郸 handan
廊坊 langfang
唐山 tangshan
邢台 xingtai
承德 chengde
沧州 cangzhou
张家口 zhangjiakou
衡水 hengshui
辛集市
藁城市
晋州市
新乐市
鹿泉市
井陉县
正定县
栾城县
行唐县
灵寿县
高邑县
深泽县
赞皇县
无极县
平山县
元氏县
赵县
宣化县
张北县
康保县
沽源县
尚义县
蔚县
阳原县
怀安县
万全县
怀来县
涿鹿县
赤城县
崇礼县
承德县
兴隆县
平泉县
滦平县
隆化县
丰宁满族自治县
宽城满族自治县
围场满族蒙古族自治县
昌黎县
抚宁县
卢龙县
青龙满族自治县
遵化市
迁安市
滦县
滦南县
乐亭县
迁西县
玉田县
唐海县
霸州市
三河市
固安县
永清县
香河县
大城县
文安县
大厂回族自治县
定州市
涿州市
安国市
高碑店市
满城县
清苑县
易县
徐水县
涞源县
定兴县
顺平县
唐县
望都县
涞水县
高阳县
安新县
雄县
曲阳县
阜平县
博野县
蠡县
冀州市
深州市
枣强县
武邑县
武强县
饶阳县
安平县
故城县
景县
阜城县
泊头市
任丘市
黄骅市
河间市
沧县
青县
东光县
海兴县
盐山县
肃宁县
南皮县
吴桥县
献县
孟村回族自治县
南宫市
沙河市
邢台县
临城县
内丘县
柏乡县
隆尧县
任县
南和县
宁晋县
巨鹿县
新河县
广宗县
平乡县
威县
清河县
临西县
武安市
邯郸县
临漳县
成安县
大名县
涉县
磁县
肥乡县
永年县
邱县
鸡泽县
广平县
馆陶县
魏县
曲周县
山西
太原 taiyuan
大同 datong
晋中 jinzhong
临汾 linfen
长治 changzhi
忻州 xinzhou
运城 yuncheng
晋城 jincheng
朔州 shuozhou
阳泉 yangquan
吕梁 lvliang
古交市
清徐县
阳曲县
娄烦县
山阴县
应县
右玉县
怀仁县
阳高县
天镇县
广灵县
灵丘县
浑源县
左云县
大同县
平定县
盂县
潞城市
长治县
襄垣县
屯留县
平顺县
黎城县
壶关县
长子县
武乡县
沁县
沁源县
高平市
泽州县
沁水县
阳城县
陵川县
原平市
定襄县
五台县
代县
繁峙县
宁武县
静乐县
神池县
五寨县
岢岚县
河曲县
保德县
偏关县
介休市
榆社县
左权县
和顺县
昔阳县
寿阳县
太谷县
祁县
平遥县
灵石县
侯马市
霍州市
曲沃县
翼城县
襄汾县
洪洞县
古县
安泽县
浮山县
吉县
乡宁县
蒲县
大宁县
永和县
隰县
汾西县
孝义市
汾阳市
文水县
中阳县
兴县
临县
方山县
柳林县
岚县
交口县
交城县
石楼县
内蒙古
呼和浩特 huhehaote
包头 baotou
呼伦贝尔 hulunbeier
赤峰 chifeng
鄂尔多斯 eerduosi
通辽 tongliao
乌海 wuhai
兴安盟 xingan
巴彦淖尔 bayannaoer
锡林郭勒 xilinguole
阿拉善 alashan
乌兰察布 wulanchabu
锡林浩特市
乌兰浩特市
托克托县
武川县
和林格尔县
清水河县
固阳县
宁城县
林西县
霍林郭勒市
开鲁县
满洲里市
扎兰屯市
牙克石市
根河市
额尔古纳市
丰镇市
卓资县
化德县
商都县
兴和县
凉城县
五原县
磴口县
阿尔山市
突泉县

PS:希望大家有空关注我的网站哦 我网站的域名是:http://www.souchisouwan.com

实例项目在 开源中国的git上 地址是:http://git.oschina.net/chpro/coushicouwan_example.git  欢迎大家下载