依赖httpclient4.2,Jsop

SemeiziCrawler.java

package kidbei.learn.crawler;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
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;
/**
* http://sejie.wanxun.org/post/2012-09-25/40039413449
* @author Administrator
*
*/
public class SemeiziCrawler {
private static final String BASEHOST = "http://sejie.wanxun.org/";
private static DefaultHttpClient client = ConnectionManager.getHttpClient();
static String url = "http://sejie.wanxun.org/post/2012-09-25/40039413449";
private static String IMGPATH = "D:\\sexpicture\\色戒美眉图"+File.separator+StringUtil.getDate();
static int STARTPAGE = 1;
static int PAGECOUNT = 100; public static void main(String[] args) {
File f = new File(IMGPATH);
if(!f.exists()){
f.mkdirs();
}
String host = BASEHOST ;
for(int i=STARTPAGE;i<PAGECOUNT;i++){
if(i != 1){
host = BASEHOST+"page/"+i;
}
System.out.println("进入第"+i+"页");
String pageContext = getResultByUrl(host);
// System.out.println(pageContext);
List<String>articleURLS = getArticleURL(pageContext);
for(String articleURL:articleURLS){
String articleContext = getResultByUrl(articleURL);
List<String> ImgURLS = getImgURLS(articleContext);
for(String ImgURL:ImgURLS){
savepic(ImgURL);
}
}
}
// String articleContext = getResultByUrl(url);
// List<String> strs = getImgURLS(articleContext);
// for(String str:strs){
// System.out.println(str);
// }
}
/**
* 根据url获取页面
* @param url
* @return
*/
public static String getResultByUrl(String url){
System.out.println("打开网页"+url);
HttpGet get = new HttpGet(url);
HttpEntity entity = null;
HttpResponse response = null;
try {
response = client.execute(get);
entity = response.getEntity();
if(entity != null){
InputStream is = entity.getContent();
StringWriter sw = new StringWriter();
IOUtils.copy(is, sw, "UTF-8");
is.close();
sw.close();
return sw.toString();
}
} catch (Exception e) {
System.out.println("网页打开出错");
return null;
}finally{
get.abort();
try {
EntityUtils.consume(entity);
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
/**
* 找出当前页面中所有帖子的地址
* @param pageStr 网页字符串
* @return
*/
public static List<String> getArticleURL(String pageContext){
if(pageContext == null){
return null;
}
List<String> articleURLS = new ArrayList<String>();
System.out.println("寻找帖子...........");
try {
Document doc = Jsoup.parseBodyFragment(pageContext);
Elements es = doc.select("div.post");
es = es.select("div[class=post-item type-photo]");
es = es.select("div.meta a:containsOwn(全文)");
for(Element e:es){
articleURLS.add(e.attr("href"));
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return articleURLS;
}
/**
* 获取帖子的图片地址
* @param articleURLS
* @return
*/
public static List<String> getImgURLS(String articleContext){
List<String>ImgURLS = new ArrayList<String>();
if(articleContext == null){
return null;
}
System.out.println("获取图片地址-----------");
Document doc = Jsoup.parse(articleContext);
Elements es = doc.select("a[target=_blank] img[src]");
for(Iterator<Element> i=es.iterator();i.hasNext();){
Element e = i.next();
ImgURLS.add(e.attr("src"));
}
return ImgURLS;
}
/**
* 保存图片
* @param ImgURL
*/
public static void savepic(String ImgURL){
if(ImgURL == null){
return ;
}
HttpGet get = new HttpGet(ImgURL);
String[] strs = ImgURL.split("/");
String fileName = strs[strs.length-1];
String savePath = IMGPATH+File.separator+fileName;
HttpEntity entity = null;
try {
HttpResponse response = client.execute(get);
entity = response.getEntity();
System.out.println("保存图片>>>>.>>>>>>"+fileName);
InputStream is = entity.getContent();
OutputStream os = new FileOutputStream(savePath);
IOUtils.copy(is, os);
IOUtils.closeQuietly(os);
IOUtils.closeQuietly(is);
} catch (Exception e) {
e.printStackTrace();
System.out.println("图片保存失败");
return ;
}
}
}

StringUtil.java

package kidbei.learn.crawler;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random; public class StringUtil {
public static String getRandomString(){
StringBuffer generateRandStr = new StringBuffer();
Random rand = new Random();
int length = 6;
char ch;
for(int i=0;i<length;i++)
{
int randNum = Math.abs(rand.nextInt())%26+97; // 产生97到122的随机数(a-z的键位值)
ch = ( char ) randNum;
generateRandStr.append( ch );
}
return generateRandStr.toString();
} public static String getSavePath(String IMGPATH,String fileName){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String date = sdf.format(new Date()).toString();
if(!(fileName.endsWith(".jpg"))){
fileName = fileName + ".jpg";
}
String randStr = StringUtil.getRandomString();
return IMGPATH+File.separator+date+File.separator+randStr+fileName;
} public static String getDate(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
return sdf.format(new Date()).toString();
}
}

ConnectionManager.java

package kidbei.learn.crawler;

import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.PoolingClientConnectionManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.params.HttpParams; public class ConnectionManager {
static final int TIMEOUT = 20000;//连接超时时间
static final int SO_TIMEOUT = 20000;//数据传输超时
static String UA = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1" +
" (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1"; public static DefaultHttpClient getHttpClient(){
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(
new Scheme("http",80,PlainSocketFactory.getSocketFactory()));
schemeRegistry.register(
new Scheme("https", 443, SSLSocketFactory.getSocketFactory())); PoolingClientConnectionManager cm = new PoolingClientConnectionManager(schemeRegistry);
cm.setMaxTotal(500);
cm.setDefaultMaxPerRoute(200); HttpParams params = new BasicHttpParams();
params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,TIMEOUT);
params.setParameter(CoreConnectionPNames.SO_TIMEOUT, SO_TIMEOUT);
params.setParameter(CoreProtocolPNames.USER_AGENT, UA); DefaultHttpClient client = new DefaultHttpClient(cm,params);
return client;
}
}

本文转自:http://www.oschina.net/code/snippet_257479_14524#23843

httpclient爬取性感美图的更多相关文章

  1. scrapy实战--爬取最新美剧

    现在写一个利用scrapy爬虫框架爬取最新美剧的项目. 准备工作: 目标地址:http://www.meijutt.com/new100.html 爬取项目:美剧名称.状态.电视台.更新时间 1.创建 ...

  2. 爬虫实战2:爬头条网美图--Ajax图片加载处理

    完整代码经测试可成功运行,目的是抓取头条网输入街拍后的图片,涉及的知识点如下 1. md5加密使用方法 方法1:不创建实例对象,直接使用 >>> from hashlib impor ...

  3. Android 性感美图在线浏览APP

    周末无聊,遂整理了下近来常用的几个开源库,无意间又发现了一些开放接口,于是乎决定融合在一起,做个简单的"性感美图"浏览的APP,名字呢,就叫"性感沙滩",效果如 ...

  4. Python爬取 | 唯美女生图片

    这里只是代码展示,且复制后不能直接运行,需要配置一些设置才行,具体请查看下方链接介绍: Python爬取 | 唯美女生图片 from selenium import webdriver from fa ...

  5. python 爬取天猫美的评论数据

    笔者最近迷上了数据挖掘和机器学习,要做数据分析首先得有数据才行.对于我等平民来说,最廉价的获取数据的方法,应该是用爬虫在网络上爬取数据了.本文记录一下笔者爬取天猫某商品的全过程,淘宝上面的店铺也是类似 ...

  6. 练习: bs4 简单爬取 + matplotlib 折线图显示 (关键词,职位数量、起薪)

    要看一种技术在本地的流行程度,最简单的就是找招聘网站按关键词搜索. 比如今天查到的职位数量是vue 1296个,react 1204个,angular 721个.国际上比较流行的是react,本地市场 ...

  7. 用python写一个爬虫——爬取性感小姐姐

    忍着鼻血写代码 今天写一个简单的网上爬虫,爬取一个叫妹子图的网站里面所有妹子的图片. 然后试着先爬取了三页,大概有七百多张图片吧!各个诱人的很,有兴趣的同学可以一起来爬一下,大佬级程序员勿喷,简单爬虫 ...

  8. Scrapy框架学习(四)爬取360摄影美图

    我们要爬取的网站为http://image.so.com/z?ch=photography,打开开发者工具,页面往下拉,观察到出现了如图所示Ajax请求, 其中list就是图片的详细信息,接着观察到每 ...

  9. python 爬取京东手机图

    初学urllib,高手勿喷... import re import urllib.request #函数:每一页抓取的30张图片 def craw(url,page): imagelist = []# ...

随机推荐

  1. php中GD库的简单使用

    在php中需要图像处理的地方GD库会发挥重要的作用,php可以创建并处理包括GIF,PNG,JPEG,WBMP以及XPM在内的多种图像格式,简单的举几个例子: 1.用GD库会创建一块空白图片,然后绘制 ...

  2. 写了一个字符串的二维表: TSta

    STA 单元 (用到 System.SysUtils.TStringHelper): --------------------------------------------------------- ...

  3. 5.python(迭代器,装饰器,生成器,基本算法,正则)

    一,迭代器 1.迭代器  (1)迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束.迭代器只能往前不会后退.  (2)对于原生支持随机访问的数据结构(如t ...

  4. codeforces B. Jeff and Periods 解题报告

    题目链接:http://codeforces.com/problemset/problem/352/B 题目意思:给出一个长度为n的序列   a1, a2, ..., an(序号i,1 <= i ...

  5. C++复制(拷贝)构造函数详解

    本文转载自 http://blog.csdn.net/lwbeyond/article/details/6202256,在此感谢作者 CTemp B(A);       //复制构造函数,C++风格的 ...

  6. 消息队列入门(四)ActiveMQ的应用实例

    >>部署和启动ActiveMQ 去官网下载:http://activemq.apache.org/ 我下载的是apache-activemq-5.12.0-bin.tar.gz, 解压到本 ...

  7. 百万用户时尚分享网站feed系统扩展实践

    Fashiolista是一个在线的时尚交流网站,用户可以在上面建立自己的档案,和他人分享自己的以及在浏览网页时看到的时尚物品.目前,Fashiolista的用户来自于全球100多个国家,用户达百万级, ...

  8. 解决Windows和Ubuntu时间不一致的问题

    问题原因是使用的时间不一致导致的.win10直接从bios读出来的时间认为就是实际时间,ubuntu认为加上8个小时 后的才是.win10用的rtc ,ubuntu用的utc 在ubuntu16.04 ...

  9. hdu 1012:u Calculate e(数学题,水题)

    u Calculate e Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  10. C语言位取反问题

    1 具体是先把十进制的数先转换成二进制的原码, 按位取反最后一位加一,然后“按权展开”,得到十进制的结果, 如果第一位是1(指转换成二进制的原码中的第一位),说明故是负数所以要在结果前面加上负号-. ...