【工作记录】爬虫
来源:互联网 发布:单片机跑马灯实验报告 编辑:程序博客网 时间:2024/05/20 02:26
因为工作需要,有时候需要自己看邮箱里得内容。
代码如下:可以先拿去跑一跑,注意密码是ssl验证码
# -*- coding: utf-8 -*-import poplibimport emailfrom email.parser import Parserfrom email.header import decode_headerfrom email.utils import parseaddr#解析邮件def guess_charset(msg): charset = msg.get_charset() if charset is None: content_type = msg.get('Content-Type', '').lower() pos = content_type.find('charset=') if pos >= 0: charset = content_type[pos + 8:].strip() return charsetdef decode_str(s): value, charset = decode_header(s)[0] if charset: value = value.decode(charset) return value#定义输出的格式def print_info(msg, indent=0): if indent == 0: for header in ['From', 'To', 'Subject']: value = msg.get(header, '') if value: if header=='Subject': value = decode_str(value) else: hdr, addr = parseaddr(value) name = decode_str(hdr) value = u'%s <%s>' % (name, addr) print('%s%s: %s' % (' ' * indent, header, value)) if (msg.is_multipart()): parts = msg.get_payload() for n, part in enumerate(parts): print('%spart %s' % (' ' * indent, n)) print('%s--------------------' % (' ' * indent)) print_info(part, indent + 1) else: content_type = msg.get_content_type() if content_type=='text/plain' or content_type=='text/html': content = msg.get_payload(decode=True) charset = guess_charset(msg) if charset: content = content.decode(charset) print('%sText: %s' % (' ' * indent, content + '...')) else: print('%sAttachment: %s' % (' ' * indent, content_type))email = raw_input('Email: ')password = raw_input('Password: ')pop3_server = raw_input('POP3 server: ')server = poplib.POP3_SSL(pop3_server)server.set_debuglevel(1)print(server.getwelcome())# 认证:server.user(email)server.pass_(password)print('Messages: %s. Size: %s' % server.stat())#新建文件,保存邮件。但是这是没有解析的文件格式myfile = file("testit.txt", 'w')resp, mails, octets = server.list()# 获取最新一封邮件, 注意索引号从1开始:for i in range(1,len(mails)): resp, lines, octets = server.retr(i)# 解析邮件: msg = Parser().parsestr('\r\n'.join(lines))# 打印邮件内容到控制台: print_info(msg) #打印到文件夹,但是格式没有解析 print >> myfile,msg# 慎重:将直接从服务器删除邮件:# server.dele(len(mails))# 关闭连接:myfile.close()#关闭文件server.quit()
email:账号
password:授权码
pop3-server:(如)pop3.qq.com
用Python的poplib模块收取邮件分两步:第一步是用POP3协议把邮件获取到本地,第二步是用email模块把原始邮件解析为Message对象,然后,用适当的形式把邮件内容展示给用户即可。
————————-8/16日补充
java正则抓取网页上的邮箱
import java.io.BufferedReader; import java.io.File; import java.io.FileWriter; import java.io.InputStreamReader; import java.io.Writer; import java.net.URL; import java.net.URLConnection; import java.sql.Time; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class wangye { public static void main(String[] args) throws Exception {// 本程序内部异常过多为了简便,不一Try,直接抛给虚拟机 Long StartTime = System.currentTimeMillis(); System.out.println("--请输入正确的网址如http://www.baidu.com--"); Scanner input = new Scanner(System.in);// 实例化键盘输入类 String webaddress = input.next();// 创建输入对象 File file = new File("D:" + File.separator + "test.txt");// 实例化文件类对象 // 并指明输出地址和输出文件名 Writer outWriter = new FileWriter(file);// 实例化outWriter类 URL url = new URL(webaddress);// 实例化URL类。 URLConnection conn = url.openConnection();// 取得链接 BufferedReader buff = new BufferedReader(new InputStreamReader( conn.getInputStream()));// 取得网页数据 String line = null; int i=0; String regex = "\\w+@\\w+(\\.\\w+)+";// 声明正则,提取网页前提 Pattern p = Pattern.compile(regex);// 为patttern实例化 outWriter.write("该网页中所包含的的邮箱如下所示:\r\n"); while ((line = buff.readLine()) != null) { Matcher m = p.matcher(line);// 进行匹配 while (m.find()) { i++; outWriter.write(m.group() + ";\r\n");// 将匹配的字符输入到目标文件 } } Long StopTime = System.currentTimeMillis(); String UseTime=(StopTime-StartTime)+""; outWriter.write("--------------------------------------------------------\r\n"); outWriter.write("本次爬取页面地址:"+webaddress+"\r\n"); outWriter.write("爬取用时:"+UseTime+"毫秒\r\n"); outWriter.write("本次共得到邮箱:"+i+"条\r\n"); outWriter.write("****谢谢您的使用****\r\n"); outWriter.write("--------------------------------------------------------"); outWriter.close();// 关闭文件输出操作 System.out.println(" —————————————————————\t"); System.out.println("|页面爬取成功,请到D盘根目录下查看test文档|\t"); System.out.println("| |"); System.out.println("|如需重新爬取,请再次执行程序,谢谢您的使用|\t"); System.out.println(" —————————————————————\t"); } }
在新建一个调用的类pawenjian打印输出结果
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.regex.Matcher; import java.util.regex.Pattern; public class pawenjian { public static void main(String[] args)throws Exception { BufferedReader buff=new BufferedReader(new FileReader("D:"+File.separator+"test.txt")); String line=null; String regex="\\w+@\\w+(\\.\\w+)+"; Pattern p=Pattern.compile(regex); while ((line=buff.readLine())!= null) { Matcher m=p.matcher(line); while (m.find()) { System.out.println(m.group()+";"); } } } }
结果如下:
该网页中所包含的的邮箱如下所示:--------------------------------------------------------本次爬取页面地址:http://tieba.baidu.com/p/3908710053爬取用时:4024毫秒本次共得到邮箱:0条****谢谢您的使用****--------------------------------------------------------
0 0
- 【工作记录】爬虫
- 爬虫-记录
- 工作记录
- 工作记录
- 工作记录
- 工作记录
- 工作记录
- 工作记录
- 工作记录
- 工作记录
- 工作记录
- 工作记录
- 工作记录
- 工作记录
- 工作记录
- 工作记录
- 工作记录
- 工作记录
- BroadcastReceiver应用详解
- uva12118
- Jmeter入门/实例
- C#中DataGridView的数据批量更新
- toj 4614 Infinite Dictionaries
- 【工作记录】爬虫
- 视图控制器 支持滑动点击
- Linux服务管理(1)--服务的分类与启动
- 第三方操作数据库LitePal解读
- 1024客户端
- centos7下使用yum安装mysql
- 如何从优化SQL入手提高数据仓库的ETL效率
- 1075 Thread in a space
- 二叉树------序列化与反序列化二叉树