httpclient爬取性感美图
依赖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爬取性感美图的更多相关文章
- scrapy实战--爬取最新美剧
现在写一个利用scrapy爬虫框架爬取最新美剧的项目. 准备工作: 目标地址:http://www.meijutt.com/new100.html 爬取项目:美剧名称.状态.电视台.更新时间 1.创建 ...
- 爬虫实战2:爬头条网美图--Ajax图片加载处理
完整代码经测试可成功运行,目的是抓取头条网输入街拍后的图片,涉及的知识点如下 1. md5加密使用方法 方法1:不创建实例对象,直接使用 >>> from hashlib impor ...
- Android 性感美图在线浏览APP
周末无聊,遂整理了下近来常用的几个开源库,无意间又发现了一些开放接口,于是乎决定融合在一起,做个简单的"性感美图"浏览的APP,名字呢,就叫"性感沙滩",效果如 ...
- Python爬取 | 唯美女生图片
这里只是代码展示,且复制后不能直接运行,需要配置一些设置才行,具体请查看下方链接介绍: Python爬取 | 唯美女生图片 from selenium import webdriver from fa ...
- python 爬取天猫美的评论数据
笔者最近迷上了数据挖掘和机器学习,要做数据分析首先得有数据才行.对于我等平民来说,最廉价的获取数据的方法,应该是用爬虫在网络上爬取数据了.本文记录一下笔者爬取天猫某商品的全过程,淘宝上面的店铺也是类似 ...
- 练习: bs4 简单爬取 + matplotlib 折线图显示 (关键词,职位数量、起薪)
要看一种技术在本地的流行程度,最简单的就是找招聘网站按关键词搜索. 比如今天查到的职位数量是vue 1296个,react 1204个,angular 721个.国际上比较流行的是react,本地市场 ...
- 用python写一个爬虫——爬取性感小姐姐
忍着鼻血写代码 今天写一个简单的网上爬虫,爬取一个叫妹子图的网站里面所有妹子的图片. 然后试着先爬取了三页,大概有七百多张图片吧!各个诱人的很,有兴趣的同学可以一起来爬一下,大佬级程序员勿喷,简单爬虫 ...
- Scrapy框架学习(四)爬取360摄影美图
我们要爬取的网站为http://image.so.com/z?ch=photography,打开开发者工具,页面往下拉,观察到出现了如图所示Ajax请求, 其中list就是图片的详细信息,接着观察到每 ...
- python 爬取京东手机图
初学urllib,高手勿喷... import re import urllib.request #函数:每一页抓取的30张图片 def craw(url,page): imagelist = []# ...
随机推荐
- Android读写assets、raw、sdard和工程文件的方法
Android开发离不开对文件的操作,前面的文章“Android简易数据存储之SharedPreferences”和“Android数据存储之SQLite的操作”,分别讲解了简单的数据的存储和数据库数 ...
- win平台检查内存泄露
int main() { _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF); _CrtSetBre ...
- iOS NSOperation的使用
先给出NSOpetation的官方指导https://developer.apple.com/library/ios/documentation/Cocoa/Reference/NSOperation ...
- 转MYSQL学习(三) 函数
这一节主要介绍MYSQL里的函数,MYSQL里的函数很多,我这里主要介绍MYSQL里有而SQLSERVER没有的函数 数学函数 1.求余函数MOD(X,Y) MOD(X,Y)返回x被y除后的余数,MO ...
- codeforces C. Arithmetic Progression 解题报告
题目链接:http://codeforces.com/problemset/problem/382/C 题目意思:给定一个序列,问是否可以通过只插入一个数来使得整个序列成为等差数列,求出总共有多少可能 ...
- Java性能优化权威指南-读书笔记(一)-操作系统性能监控工具
一:CPU 1. 用户态CPU是指执行应用程序代码的时间占总CPU时间的百分比. 系统态CPU是指应用执行操作系统调用的时间占总CPU时间的百分比.系统态CPU高意味着共享资源有竞争或者I/O设备之间 ...
- 修改PHP网站默认首页
一般默认的首页文件是index.php index.php3 index.html index.htm之类的,要想修改为myNewIndex.php, 进入服务器Apache目录,找到httpd.co ...
- mysql自增字段重排 或 归零
由于删除了某些记录行,所以自增字段不连续了.重排或归零的方法:方法1:truncate table 你的表名//这样不但重新定位自增的字段,而且会将表里的数据全部删除,慎用!方法2:delete fr ...
- Git Server & Git Hook
http://ju.outofmemory.cn/entry/16893 我喜欢 github,我现在的个人代码全部是托管在上面了,但是一些公司或者某些项目不适合放入github中,你希望能有一个完全 ...
- hdu 3746 kmp求循环节
题意就是将所给的字符串变成多个完整的循环(至少两个),然后给出最少需要添加的字符数.