一个简单的网络爬虫-从网上爬取美女图片

CrawlerPicture.java 文件

package com.lym.crawlerDemo;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

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

import com.lym.mode.Picture;

/**
 * 从  http://m.qqba.com/ 爬取美女图片
 * @author Administrator
 *
 */
public class CrawlerPicture {

	public final static int STARTPAGE = 301;
	public final static int ENDPAGE = 500;//爬取的页面数量
	
	/**
	 * 获取图片的src和alt属性值
	 * @return
	 * @throws IOException
	 */
	public static List<Picture> getPictureUrl() throws IOException{
		int number = 1;
		List<Picture> pics = new ArrayList<Picture>();//存储获取到的所有图片的URL地址
		for (int i = STARTPAGE; i < ENDPAGE; i++) {
			String url = "http://m.qqba.com/people/list/"+i+".htm";
			Document doc = null;
			doc = Jsoup.connect(url).get();		//获取页面文档
			Elements divList = doc.body().select("div.image-cell");
			for (int j = 0; j < divList.size(); j++) {
				Elements imgList = divList.get(j).select("img");//一个网页内所有的img标签
				for (int k = 0; k < imgList.size(); k++) {
					Picture pic = new Picture();
					pic.setId(number++);
					pic.setSrc(imgList.get(k).attr("src"));
					pic.setAlt(imgList.get(k).attr("alt"));
					
					pics.add(pic);
				}
			}
		}
		return pics;
	}
	
	
	/**
	 * 获取图片输入流
	 * @param picUrl  图片的URL地址
	 * @return
	 * @throws IOException 
	 */
	public static InputStream getPictureInputStream(String picUrl) throws IOException{
		URL url = new URL(picUrl);
		DataInputStream dis = new DataInputStream(url.openStream());//获取图片的输入流
		return dis;
	}
	
	/**
	 * 保存图片到本地磁盘中
	 * @param number 图片编号
	 * @throws IOException 
	 */
	public static void savePicture(InputStream in, Picture pic) throws IOException{
		String newImgUrl = "D:/picture/"+pic.getAlt()+"--"+pic.getId()+".jpg";//图片在磁盘上的存储路径
		FileOutputStream fos = new FileOutputStream(new File(newImgUrl));
		byte[] buf = new byte[1024];
		int len = -1;
		while( (len = in.read(buf)) >0){
			fos.write(buf, 0, len);
		}
		fos.close();
	}
	
	
	
	
	
	/**
	 * 测试
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			List<Picture> pics = getPictureUrl();
			System.out.println("图片正在下载...");
			for (int i = 0; i < pics.size(); i++) {
				Picture pic = pics.get(i);
				String picUrl = pic.getSrc();
				InputStream in = getPictureInputStream(picUrl);
				savePicture(in, pic);
				in.close();
			}
			System.out.println("下载完成!");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


Picture.java文件

package com.lym.mode;

public class Picture {

	/**
	 * 图片编号
	 */
	private int id;
	/**
	 * 图片地址
	 */
	private String src;
	/**
	 * 图片说明信息
	 */
	private String alt;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getSrc() {
		return src;
	}
	public void setSrc(String src) {
		this.src = src;
	}
	public String getAlt() {
		return alt;
	}
	public void setAlt(String alt) {
		this.alt = alt;
	}
	@Override
	public String toString() {
		return "Picture [id=" + id + ", src=" + src + ", alt=" + alt + "]";
	}
	
}



  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
抱歉,我是AI语言模型,无法提供封装好的python代码,但是我可以提供Scrapy微博爬虫的基本思路和代码示例: Scrapy微博爬虫的基本思路: 1. 登录微博 2. 根据关键词搜索微博,获取微博列表 3. 遍历微博列表,提取微博的相关信息,如微博ID、微博内容、发布时间、点赞数、转发数、评论数、作者信息等 4. 如果有下一页,则继续爬取下一页的微博列表,重复2-3步骤 5. 将提取的微博信息保存到本地或远程数据库中 Scrapy微博爬虫的代码示例: 1. 在命令行中创建一个Scrapy项目: scrapy startproject weibo 2. 在weibo/spiders目录下创建一个名为weibospider.py的爬虫文件: import scrapy from scrapy.http import Request class WeiboSpider(scrapy.Spider): name = "weibo" allowed_domains = ["weibo.com"] start_urls = [ "https://weibo.com/" ] def start_requests(self): login_url = 'https://login.weibo.cn/login/' yield Request(url=login_url, callback=self.login) def login(self, response): # 在这里实现微博登录的逻辑 # ... # 登录成功后,调用parse方法开始爬取微博 yield Request(url=self.start_urls[0], callback=self.parse) def parse(self, response): # 在这里实现根据关键词搜索微博的逻辑 # 从搜索结果页面获取微博列表 # ... # 遍历微博列表,提取微博的相关信息 for weibo in weibo_list: weibo_id = weibo.get('id') weibo_content = weibo.get('content') publish_time = weibo.get('publish_time') likes = weibo.get('likes') reposts = weibo.get('reposts') comments = weibo.get('comments') author = weibo.get('author') # 将提取的微博信息保存到本地或远程数据库中 # ... # 如果有下一页,则继续爬取下一页的微博列表 next_page = response.xpath('//a[text()="下一页"]/@href').extract_first() if next_page: yield Request(url=next_page, callback=self.parse) 3. 在命令行中运行爬虫: scrapy crawl weibo 以上是一个简单的Scrapy微博爬虫示例,具体实现需要根据实际情况进行调整和完善。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值