import com.mongodb.BasicDBObject
import com.mongodb.DBCollection
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import org.jsoup.select.Elements public class ZhongYuan {
public static final DBCollection test = MongoUtils.getCollectionByName("name", "table",
"port")
public static final DBCollection html = MongoUtils.getCollectionByName("name", "table",
"port") public static void main(String[] args){
// 循环遍历页面进行数据爬去
for(int i = 500 ; i<598 ;i++) {
String url = "http://sh.centanet.com/xiaoqu/g"+i+"/";
String result = RequestUtil.doGet(url, "GBK");
Document doc = Jsoup.parse(result);
//页面加载完成后对document进行处理,获取自己有用的数据
parseList(doc);
System.out.println("page=====>"+i);
}
}
private static void parseList(Document doc){ Elements elements = doc.select("div.house-listBox>div");
int j = 0;
for(Element element : elements){ String name = element.select(".house-title a").first().text();
html.save(new BasicDBObject("name",name).append("html",element.toString()))
String regionstr = element.select("div>div>p").first().text().replace(' ','-');
String region = regionstr.split("-")[0];
String address = null;
if(regionstr.split("-").length>1) {
address = regionstr.split("-")[1] + regionstr.split("-")[2];
} else {
address = regionstr.split("-")[1];
} String price = element.select("div>div").last().select("p").first().text();
test.insert(new BasicDBObject("city","上海").append("region",region).append("name",name)
.append("avg_price",price));
System.out.println(name);
j++;
}
System.out.println(j);
}
private static void parseList1(Document doc) {
Elements elements = doc.select("div.section>ul>li");
String name = null;
String region = null;
String price = null;
for (Element element : elements) {
if (element.toString().contains("room-img")) {
name = element.select("h5.room-name a").first().text();
Elements datas = element.select("p");
int i = 0;
for (Element data : datas) {
i++;
if (i == 2) {
price = data.text();
}
if (i == 4) {
region = data.text();
}
}
System.out.println(name + price + region);
test.insert(new BasicDBObject("city","上海").append("region",region).append("name",name)
.append("avg_price",price));
}
}
}
}

相关doget请求自己封装了一个util,可以看看,上面的这一句String result = RequestUtil.doGet(url, "GBK");用的就是自己封装的util包,这里也可以使用jsoup自己封装的。

/**
* 发送get请求
* @param url
* @return
*/ public static String doGet(String url) {
return doGet(url, null, "UTF-8", false);
} public static String doGet(String url, boolean encodeUrl) {
return doGet(url, null, "UTF-8", encodeUrl);
} public static String doGet(String url, String charset) {
return doGet(url, null, charset, true);
} public static String doGet(String url, Map<String, String> headers) {
return doGet(url, headers, "UTF-8", true);
} public static String doGet(final String url, Map<String, String> headers, String charset, boolean encodeUrl) {
CloseableHttpClient client = HttpClients
.custom()
.setUserAgent(USERAGENT_CHROME)
.build(); CloseableHttpResponse response = null;
String result = null;
String requestUrl = url;
try {
if(encodeUrl) {
requestUrl = encodingUrl(url, charset);
}
HttpGet httpGet = new HttpGet(requestUrl);
// RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(3000).setConnectTimeout(3000).build();//设置请求和传输超时时间
// httpGet.setConfig(requestConfig);
if(headers != null) {
for(Map.Entry<String, String> entry : headers.entrySet()) {
httpGet.addHeader(entry.getKey(), entry.getValue());
}
}
response = client.execute(httpGet);
int statusCode = response.getStatusLine().getStatusCode();
if(statusCode == 200) {
result = EntityUtils.toString(response.getEntity(), charset);
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(response != null) {
try {
response.close();
} catch (IOException e) {
}
}
if(client != null) {
try {
client.close();
} catch (IOException e) {
}
}
}
return result;
}

jsoup爬虫,项目实战,欢迎收看的更多相关文章

  1. Go语言之高级篇Beego框架之爬虫项目实战

    一.爬虫项目 1.爬虫基础 a.网页上面会有相同的数据 b.去重处理 布隆过滤器哈希存储 c.标签匹配: 正则表达式beautiful soup或lxml这种标签提取库 d.动态内容 phantomj ...

  2. Java爬虫项目实战(一)

    目的: 通过网络爬虫爬取中国最小粒度的区域维度信息,包括省(Province) .市(City).县(County).镇(town).村委会(village) 主网站链接: http://www.st ...

  3. 【Java】Jsoup爬虫,一个简单获取京东商品信息的小Demo

    简单记录 - Jsoup爬虫入门实战 数据问题?数据库获取,消息队列中获取中,都可以成为数据源,爬虫! 爬取数据:(获取请求返回的页面信息,筛选出我们想要的数据就可以了!) 我们经常需要分析HTML网 ...

  4. Python爬虫开发与项目实战

    Python爬虫开发与项目实战(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1MFexF6S4No_FtC5U2GCKqQ 提取码:gtz1 复制这段内容后打开百度 ...

  5. 学习推荐《精通Python网络爬虫:核心技术、框架与项目实战》中文PDF+源代码

    随着大数据时代的到来,我们经常需要在海量数据的互联网环境中搜集一些特定的数据并对其进行分析,我们可以使用网络爬虫对这些特定的数据进行爬取,并对一些无关的数据进行过滤,将目标数据筛选出来.对特定的数据进 ...

  6. Python爬虫开发与项目实战pdf电子书|网盘链接带提取码直接提取|

    Python爬虫开发与项目实战从基本的爬虫原理开始讲解,通过介绍Pthyon编程语言与HTML基础知识引领读者入门,之后根据当前风起云涌的云计算.大数据热潮,重点讲述了云计算的相关内容及其在爬虫中的应 ...

  7. Scrapy爬虫框架第八讲【项目实战篇:知乎用户信息抓取】--本文参考静觅博主所写

    思路分析: (1)选定起始人(即选择关注数和粉丝数较多的人--大V) (2)获取该大V的个人信息 (3)获取关注列表用户信息 (4)获取粉丝列表用户信息 (5)重复(2)(3)(4)步实现全知乎用户爬 ...

  8. 给缺少Python项目实战经验的人

    我们在学习过程中最容易犯的一个错误就是:看的多动手的少,特别是对于一些项目的开发学习就更少了! 没有一个完整的项目开发过程,是不会对整个开发流程以及理论知识有牢固的认知的,对于怎样将所学的理论知识应用 ...

  9. Python项目实战:福布斯系列之数据采集

    1 数据采集概述 开始一个数据分析项目,首先需要做的就是get到原始数据,获得原始数据的方法有多种途径.比如: 获取数据集(dataset)文件 使用爬虫采集数据 直接获得excel.csv及其他数据 ...

  10. Python NLP完整项目实战教程(1)

    一.前言 打算写一个系列的关于自然语言处理技术的文章<Python NLP完整项目实战>,本文算是系列文章的起始篇,为了能够有效集合实际应用场景,避免为了学习而学习,考虑结合一个具体的项目 ...

随机推荐

  1. 自动拆装箱(int,Integer)

    包装类型Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个 ...

  2. sublime插件insertDate显示ISO时间

    1 下载insertDate插件以及安装完毕 2 把光标放在想插入ISO时间的地方 3 按住:alt+f5,之后,在sublime下面的Date format string输入:iso.之后按ente ...

  3. HDU1828:Picture

    浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:http://acm.hdu.edu.cn/showproblem.php? ...

  4. WPF Get Multibinding Expression, Update Source,

    wpf 拿到某个control的multibinding以及其中每个Binding 1. 拿到multibinding      MultiBindingExpression mbe = Bindin ...

  5. resiprocate使用入门:内网搭建基于repro的sipproxy测试环境

    测试环境 sipproxy:repro + centos 客户端:windows电脑客户端使用X-Lite,手机andriod客户端使用linphone repro配置和启动 log的配置 如果使用默 ...

  6. Behave + Selenium(Python) 四

    来自T先生 今天我们开始讲讲behave的厉害的地方. Tag文件的使用 在behave里面,如何来控制哪些case需要run,哪些case不需要run,这个时候就用Tag来控制.好了,接下来我用Ta ...

  7. warning: conflicting types for built-in function 'puts'

    warning: conflicting types for built-in function 'puts' [编译器版本] arm-linux-gcc 3.4.1 [问题描述] 在做嵌入式底层开发 ...

  8. 流媒体中ffmpeg 命令的使用

    在linux系统中,使用到的有关流媒体音视频流进行处理的ffmpeg 命令的常用的命令己命令对应的参数如下:记录一下: 1.分离视频音频流 ffmpeg -i input_file -vcodec c ...

  9. [原创]Devexpress XtraReports 系列 1 创建静态报表

    在各种管理系统中,报表是必不可少的.报表是数据最直观体现的方式之一 以前,屌丝我是微软的忠实粉丝,所以报表工具就是微软自带的RDLC... 不可否认的是RDLC的功能是非常强大的.能够满足绝大多数的要 ...

  10. 虚拟机出现ping DUP

    在主机的网络连接里,停用虚拟网卡vmnet1和vmnet8,再启用虚拟网卡vmnet1和vmnet8.