Java拉取网页资源

package com.zp.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

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

/**
 * 大数据批量数据检索工具类
 * @author 盲鹰
 * @version 1.0
 */
public class DataDownUtil {

    /**
     * 根据网址和网页的编码集,获取网页源代码
     * @author 盲鹰
     * @param url    网址
     * @param encoding    网页编码集
     * @return    
     */
    public static String getHTMLResourceByUrl(String url, String encoding) {
        StringBuffer buffer = new StringBuffer();
        URL urlObj = null;
        URLConnection uc = null;
        InputStreamReader isr = null;
        BufferedReader reader = null;
        
        try {
            // 建立网络连接
            urlObj = new URL(url);
            // 打开网络连接
            uc = urlObj.openConnection();
            // 建立文件写入流
            isr = new InputStreamReader(uc.getInputStream(), encoding);
            // 建立文件缓冲写入流
            reader = new BufferedReader(isr);
            String temp = null;
            while((temp = reader.readLine()) != null) {
                //边读边写
                buffer.append(temp + "\n");
            }    
            return buffer.toString();
        } catch (MalformedURLException e) {
            e.printStackTrace();
            System.out.println("世界上最遥远的距离就是没有网,请检查设置。");
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("您打开的网络连接失败!请您稍后。");
        } finally {
            if (isr != null) {
                try {
                    isr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
    
    /**
     * 解析网页源代码,获取对应的自定义采集内容
     * @author 盲鹰
     * @param url    网址
     * @param encoding    网页编码集
     * @return    List集合
     */
    public static List<HashMap<String, String>> getHotelInfo(String url, String encoding) {
        // 根据网址和网页的编码集,获取网页源代码
        String html = getHTMLResourceByUrl(url, encoding);
        // 解析网页源代码,获取对应的自定义采集内容
        Document document = Jsoup.parse(html);
        // 获取最外层的 div id="hotel_list"
        Element element = document.getElementById("listZone");
        // 获取酒店结果列表searchresut_list
        Elements elements = document.getElementsByClass("Q-tpListInner");
        
        // 解析网页源代码层次结构
        List<HashMap<String, String>> maps = new ArrayList<HashMap<String, String>>();
        for (Element el : elements) {
            HashMap<String, String> map = new HashMap<String, String>();
            // 获取酒店图片
            String imgSrc = el.getElementsByTag("img").attr("src");
            // 获取酒店title
            String title = el.getElementsByTag("img").attr("alt");
            // 获取酒店的描述
            String content = el.getElementsByTag("p").text();
            map.put("imgSrc", imgSrc);
            map.put("title", title);
            map.put("content", content);
            //存储到List集合中用于前台遍历
            maps.add(map);
        }
        return maps;        
    }
    
    public static void main(String[] args) {

        String url = "http://tech.qq.com/";
        String encoding = "gbk";
        
        List<HashMap<String, String>> maps = getHotelInfo(url, encoding);
        if (maps != null && maps.size() > 0) {
            for (HashMap<String, String> map : maps) {
                System.out.println("title:" + map.get("title"));
                System.out.println("图片:" + map.get("imgSrc"));
                System.out.println("描述:" + map.get("content"));
            }
        }
        
        // 返回到页面显示

    }
    
}

转载于:https://my.oschina.net/shadowolf/blog/842497

Java中,我们可以使用JavaMail API来发送和拉取电子邮件。以下是基本步骤: **发送邮件**: 1. 导入必要的库:`import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage;` 2. 配置邮件属性:设置SMTP服务器地址、端口、用户名和密码。 3. 创建`Session`对象:使用`Properties`配置邮箱信息,然后通过`Session.getInstance(props)`获取会话实例。 4. 创建`MimeMessage`:指定发件人、收件人、主题和正文。 5. 连接到SMTP服务器并发送消息:使用`Transport.send(message)`。 ```java Properties props = new Properties(); props.put("mail.smtp.host", "smtp.example.com"); props.put("mail.smtp.port", "587"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); Session session = Session.getInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("username", "password"); } }); try ( MimeMessage message = new MimeMessage(session) ) { message.setFrom(new InternetAddress("sender@example.com")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("receiver@example.com")); message.setSubject("测试邮件"); message.setText("这是一封测试邮件"); Transport.send(message); } catch (MessagingException e) { e.printStackTrace(); } ``` **拉取邮件**(例如从IMAP服务器): 1. 首先,你需要导入相应的库:`import javax.mail.*; import javax.mail.event.*; import com.sun.mail.imap.IMAPStore;` 2. 初始化IMAP连接,并登录到邮箱。 3. 搜索邮件:创建`FetchProfile`来定义要获取的邮件属性。 4. 使用`Folder`对象执行搜索并监听事件。 ```java IMAPStore store = new IMAPStore("imap.example.com"); store.connect("username", "password"); store.select("inbox"); // 或者其他邮件箱 // 定义要拉取的属性 FetchProfile profile = new FetchProfile(); profile.add(FetchProfile.Item.FLAGS); // 开始邮件检索 folder.fetch(mailIDs, profile); folder.expunge(); // 清除已读标记后的邮件 // 监听新的邮件 folder.getNewMessagesListener().add(new MailListener() { public void onNewMessages检査List<Flag> flags) { for (Flag flag : flags) { System.out.println("新邮件: " + flag.toString()); } } }); store.close(); ``` 请注意,实际应用中可能需要处理异常,并且在生产环境中推荐使用更健壮的错误处理和重试策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值