【工作记录】爬虫

来源:互联网 发布:单片机跑马灯实验报告 编辑:程序博客网 时间: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
原创粉丝点击