1.这个类是用来解析网站的内容
重点是:"div#page>div#content>div#local>div#recommend>ul>li>a";
这里用用firefox的firebug组件查看网页的代码结构,不同的网页路径也不一样。
package zy.crawl.hupu;
import java.io.IOException;
import zy.crawl.common.*;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class CrawlHupu
{
private List<NewsInfo> newsList = new ArrayList<>();//用来存储爬取的信息对象
public String GetHtml(String url) //还方法是设置网络链接,是固定的用法
{
String html = null;
HttpClient httpClient = new DefaultHttpClient();
//set proxy ,because of nsn
// HttpHost proxy = new HttpHost("10.68.120.11", 3128);
// httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
//configuration timeout
httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 20000);
HttpGet httpGet = new HttpGet(url);
try
{
HttpResponse httpResponse = httpClient.execute(httpGet);
int resStatu = httpResponse.getStatusLine().getStatusCode();
if(resStatu == HttpStatus.SC_OK)
{
HttpEntity entity = httpResponse.getEntity();
if(entity != null)
{
html = EntityUtils.toString(entity);
}
}
}
catch (Exception e)
{
System.out.println("Connect " + url+" error");
e.printStackTrace();
}
finally
{
httpClient.getConnectionManager().shutdown();
}
return html;
}
public void ParseHtmlForNewsList()
{
String html = GetHtml("http://qczx.qc1818.com/");
//hupu voice 的第一个可以暂时去掉一个css,这样就不用处理空格了
//String cssQueryHupu = "div.content>div.row>div.column>div.row>div.column>div.uibox>div.uibox-con>ul.ui-list>li>a";
String cssQueryHupu ="div#mainbody>div.cjkx_mtsd>div.cjkx>ul.list_left>li>a";//这行是用来获取每条对象的标题信息
// String cssQueryHuxiu = "div.container-hx>div.row-fluid-wrap-hx>"
// + "div.center-container-hx>div.clearfix>div.center-ctr-wrap>div.center-ctr-box>div.article-list>div.article-box>div.article-box-ctt>h4>a";
//
// String cssQueryIteye = "div#page>div#content>div#local>div#recommend>ul>li>a";
if(!html.isEmpty())
{
Document doc = Jsoup.parse(html,"http://qczx.qc1818.com/");
Elements linkElements = doc.select(cssQueryHupu);
/*
* <a class="button read" href="http://book.zongheng.com/showchapter/48552.html">点击阅读</a>
* 最后经过测试发现带空格的class可以写成两个select 写成 Elements indexEs = doc.select(".button").select(".read");成功抓取该书所有目录和链接。
*/
//Elements linkElements = doc.select("div.hp-wrap").select("div.index-wrap>div.col-B>div.voice-main>div.public>div#J_public_item>ul>li>dl.item-bd>dt>span>a");
for(Element ele:linkElements)
{
NewsInfo newsTemp = new NewsInfo(ele.text(), ele.absUrl("href"));
PaserHtmlForNewsContent(newsTemp.getHtmlAddr(),newsTemp);
newsList.add(newsTemp);
//String href = ele.attr("abs:href"); 也可以获取绝对地址
//for test
System.out.println(newsTemp.getTitle()+" "+newsTemp.getHtmlAddr());
if(newsTemp.getImageAddrList() != null)
System.out.println(newsTemp.getImageAddrList().get(0));
System.out.println(newsTemp.getContent());
}//System.out.println(newsList.get(0).getContent());
}
}
public void PaserHtmlForNewsContent(String contentHtmlAddr, NewsInfo newsTemp)//通过上面获得的标题信息的连接,抓取标题的正文部分。
{
String html = GetHtml(contentHtmlAddr);
String cssQueryphoto="asdfas";
String cssQueryContent = //"div#pageMain>div.pageMainLeft>div.detailWrap>div.detailTitle"+
//+"div#pageMain>div.pageMainLeft>div.detailWrap>div.detailIntr"
"div#pageMain>div.pageMainLeft>div.detailWrap>div.detail";
//String cssQueryContent = "div.content>div.row>div.column>div#articlewrap.area";
// String cssQueryphoto = "div.hp-wrap>div.voice-main>div.voice-item>ul>li>div.voice-read-detailed>div.voice-photoVideo>"
// + "div.voice-photo>div.small-img>img";
if(!html.isEmpty())
{
Document doc = Jsoup.parse(html);
Elements contentElements = doc.select(cssQueryContent);
Elements imgElements = doc.select(cssQueryphoto);
for(Element ele:contentElements)
{
newsTemp.setContent(ele.html());
}
for(Element ele:imgElements)
{
List<String> tempImgList = new ArrayList<>();
tempImgList.add(ele.attr("src"));
newsTemp.setImageAddrList(tempImgList);
}
}
}
public static void main(String[] args)
{
CrawlHupu crawlHupu = new CrawlHupu();
crawlHupu.ParseHtmlForNewsList();
}
}
2.这个是要获取的信息的类。不多解释。
package zy.crawl.common;
import java.util.List;
public class NewsInfo
{
private String title;
private String htmlAddr;
private String content;
private List<String> imageAddrList;
public NewsInfo(String title, String htmlAddr)
{
super();
this.title = title;
this.htmlAddr = htmlAddr;
}
public NewsInfo(String content, List<String> imageAddrList)
{
super();
this.content = content;
this.imageAddrList = imageAddrList;
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title = title;
}
public String getHtmlAddr()
{
return htmlAddr;
}
public void setHtmlAddr(String htmlAddr)
{
this.htmlAddr = htmlAddr;
}
public String getContent()
{
return content;
}
public void setContent(String content)
{
this.content = content;
}
public List<String> getImageAddrList()
{
return imageAddrList;
}
public void setImageAddrList(List<String> imageAddrList)
{
this.imageAddrList = imageAddrList;
}
}
分享到:
相关推荐
Java实现定向爬取数据的源码,有详细的说明文档,比较简单,思路清晰,比较适合初学者和中级的人员参考。
WebMagic(Java)爬虫实现,实现数据爬取,并导出到excel文件
通过Java网络爬虫爬取指定代理ip网上的ip,利用了jsoup、httpclient技术实现
1.一个JAVA开发的简单网络爬虫 可以实现对指定站点新闻内容的获取 程序很简单 大家一起学习 2. 代码内容包括以下部分: (1)爬虫原理,网络爬虫是数据采集的一种方法,确定一个(多个)种子网页,进行数据的内容...
目的: 实现自动化地从互联网中收集信息的工具,可以用于网站数据抓取、信息检索、搜索引擎建设等。 功能特点: 网页抓取: 爬虫程序根据指定的URL,访问网页并下载页面内容。 信息解析: 使用Jsoup等HTML解析库...
这个Java项目是一个网络爬虫,也称为网络蜘蛛,旨在自动地从互联网上抓取网页内容并进行处理。...网络爬虫的实现需要考虑到网站的反爬虫机制,如设置User-Agent、限制访问频率、处理验证码等,以保证爬取的顺利进行。
根据已登录的cookie进行新浪微博好友关系、指定用户微博内容、关键词搜索内容的爬取 使用方法: 1、在config文件夹下cookie.conf输入相应的cookie,其中www_cookie对应了登陆PC端新浪微博(weibo.com)的cookie;wap...
定时爬取指定连接的内容,加入所爬取到的内容保存到指定文件夹中 调用加载到HBase数据库的项目(Jar),使数据加载到HBase中 2.加载数据到HBase数据库项目 读取指定目录下的文件,分析其中的内容并保存到HBase中 多...
- 基于Java8 +、开源爬虫框架WebMagic、Springboot的一个链家爬虫,上手即用,可以指定需要爬取的城市名称、或者爬取全国。 - 数据存Mysql,默认根据搜索城市+日期自动建表,如搜索“南京”,则会通过JDBC新建表:...
Flume的核⼼其实就是把数据从数据源收集过来,再将收集到的数据送到指定的⽬的地…… 1.2通过⽹络采集⼤数据 ⽹络采集是指通过⽹络爬⾍或⽹站公开API等⽅式,从⽹站上获取⼤数据信息,该⽅法可以将⾮结构化数据从⽹...
本来是想着用jsoup来爬取网易的评论,结果一分析发现获取的网页中找不到评论数据。研究了半天,无果。于是百度看看。 果然是大厂,在安全方面肯定做的比较多,原因是在传递参数的时候对参数进行加密,所以在我们直接...
对于海量数据,如何实现分布式爬取? 分析 抓取之后就是对抓取的内容进行分析,你需要什么内容,就从中提炼出相关的内容来。 常见的分析工具有正则表达式,BeautifulSoup,lxml等等。 存储 分析出我们需要的...
媒体喜鹊Media Magpie 是一个基于 spring 框架的 JAVA Web 应用程序,它提供了存储和发布照片和视频给其他用户的功能。 该应用程序可以在每台 linux 机器上作为独立应用程序启动,并且可以扫描照片和视频的指定...
用户自行设定指定商品的监控价格,运行脚本获取价格数据。 申明:本脚本没有涉及JD账号登录,没有抓取任何JD敏感信息,仅在手动执行一次脚本时会读取JD公开商品页面的商品名称和价格,如有任何敏感侵权问题,请联系...
1.编写一个网络爬虫,使其能够对网络中指定站点的新闻进行自动收集并存入数据库; 2.数据的去重和网络爬虫的反爬虫策略应对; 3.提供一个新闻展示页面,把爬取到的新闻展示给用户; 4.提供新闻订阅页面,用户可以在...
00-关闭指定应用-通用版.js 00-本地时间及网络时间验证改版.js 00-正则匹配关闭应用-适用大部分手机(1).js 00-正则匹配关闭应用-适用大部分手机.js 00-简化点击控件.js 00-结束事件与结束应用(1).js 00-结束...