<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>发送 on 庞玉栋个人博客</title><link>https://pangyd.com/tags/%E5%8F%91%E9%80%81/</link><description>Recent content in 发送 on 庞玉栋个人博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 12 Aug 2019 10:16:18 +0800</lastBuildDate><atom:link href="https://pangyd.com/tags/%E5%8F%91%E9%80%81/index.xml" rel="self" type="application/rss+xml"/><item><title>智联招聘爬虫+email邮件发送</title><link>https://pangyd.com/post/217-email/</link><pubDate>Mon, 15 Jul 2019 09:04:11 +0800</pubDate><guid>https://pangyd.com/post/217-email/</guid><description>&lt;pre lay-lang="Python" class="layui-code" skin="notepad"># -*- coding: utf-8 -*-
import requests
import re
import time
import json
import pymysql
import random
import smtplib
import email.mime.multipart
import email.mime.text

class Spider():

 def __init__(self):
 self.ls = []
 self.count = 0
 self.USER_AGENTS = [
 "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
 "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
 "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
 "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
 "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
 "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
 "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
 "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
 "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
 "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
 "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
 "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
 "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
 "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
 ]

	#程序执行完毕后发送邮件函数
 def emial(self):
 try:
 subject = 'python执行日志'
 content = "可用{}个代理ip，所有url已经爬取完毕".format(len(self.ls))
 msg = email.mime.multipart.MIMEMultipart()
 msg['from'] = 'xxxxx@qq.com'
 msg['to'] = 'xxxx@qq.com'
 msg['subject'] = subject
 content = content
 txt = email.mime.text.MIMEText(content, 'plain', 'utf-8')
 msg.attach(txt)
 smtpHost = 'smtp.qq.com'
 smtpPort = '25'
 sslPort = '465'

 smtp = smtplib.SMTP_SSL(smtpHost, sslPort)
 smtp.ehlo()
 smtp.login('xxxxx@qq.com', 'xxxxx')
 smtp.sendmail('xxxx@qq.com', 'xxxxx@qq.com', str(msg))
 print("发送成功！")
 smtp.quit()
 except Exception as e:
 print(e)

	#从数据库中查询代理函数
 def sql(self):
 try:
 db = pymysql.connect(host="xxxxxxxxxx", user="xxxxxx", password="xxxxxx", db="xxxxx", port=3306,
 charset="utf8")
 cur = db.cursor()
 sql = "SELECT * FROM proxy WHERE type=0"
 cur.execute(sql) # 执行sql语句
 results = cur.fetchall() # 获取查询的所有记录
 for row in results:
 head = row[0]
 ip = row[1]
 poxy = row[2]
 if str(head) == 'HTTP':
 self.ls.append(ip + ':' + poxy)
 print('可用{}个代理ip，爬虫开始'.format(len(self.ls)))
 self.crawler_data()
 except Exception as e:
 print(e)

	#爬虫入口，负责构建url
 def crawler_data(self):
 i = 0
 for n in ['投资经理', '土建工程师', '采购', '销售', '运营', 'java', '产品经理', '人力资源', '总经理', 'Python', 'iOS', 'PHP', 'Android',
 'UI设计师', '测试工程师', '自动化测试', '功能测试', '性能测试', '测试开发', '硬件测试', '运维工程师', '系统工程师', '网络工程师', '运维开发', 'DBA',
 '技术经理', '架构师', '技术总监', 'CTO', '技术合伙人', '运维总监', '安全专家', '项目总监',
 'Html5', '产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '游戏策划', '电商产品经理']:
 try:
 while True:
 url = 'https://www.liepin.com/zhaopin/?industryType=&amp;amp;jobKind=&amp;amp;sortFlag=15°radeFlag=0&amp;amp;industries=&amp;amp;salary=&amp;amp;compscale=&amp;amp;key={}&amp;amp;clean_condition=&amp;amp;headckid=4a4adb68b22970bd&amp;amp;d_pageSize=40&amp;amp;siTag=p_XzVCa5J0EfySMbVjghcw~fA9rXquZc5IkJpXC-Ycixw&amp;amp;d_headId=62ac45351cdd7a103ac7d50e1142b2a0&amp;amp;d_ckId=62ac45351cdd7a103ac7d50e1142b2a0&amp;amp;d_sfrom=search_fp&amp;amp;d_curPage=0&amp;amp;curPage={}'.format(
 n, random.randint(1, 20))
 self.request_job_list(url)
 print(url)
 i = i + 1
 if i == 10:
 i = 0
 break
 except Exception as e:
 print(e)
 self.emial()

	#接受传递来的url 进行解析页面数据，传递数据给下一个函数
 def request_job_list(self, url):
 try:
 print(url)
 headers = {
 'Referer': 'https://www.liepin.com/',
 'User-Agent': random.choice(self.USER_AGENTS)
 }
 reponse = requests.get(url, proxies={'http': random.choice(self.ls)}, headers=headers, timeout=5)
 ret = random.uniform(0, 2)
 time.sleep(ret)
 pattern = re.compile('&lt;div class="job-info">'
 '.*?&lt;h3.*?title="(.*?)">.*?&lt;a href="(.*?)" .*?title="(.*?)">.*?&lt;/a>&lt;p class="company-name">&lt;a href="(.*?)" .*?title="(.*?)">.*?&amp;gt;(.*?)&lt;/a>.*?&lt;/p></description></item><item><title>Socket向服务端发送数据（Python）</title><link>https://pangyd.com/post/216-socket-python/</link><pubDate>Sat, 13 Jul 2019 08:58:19 +0800</pubDate><guid>https://pangyd.com/post/216-socket-python/</guid><description>&lt;pre lay-lang="Python" class="layui-code" skin="notepad">import socket
def soct(str_r):
 try:
 address = ('ip', 端口)
 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 client.connect(address) 
 client.sendall(kk.encode()) #发送数据
 client.settimeout(10) #设置超时时间
 client.close()
 except Exception as e:
 return "失败 "+str(e)
&lt;/pre></description></item><item><title>java mail实现Email的发送,完整代码</title><link>https://pangyd.com/post/182-java-mailemail/</link><pubDate>Sun, 26 Nov 2017 18:34:36 +0800</pubDate><guid>https://pangyd.com/post/182-java-mailemail/</guid><description>&lt;p>1、对应用程序配置邮件会话&lt;/p>&lt;p>javax.mail.Session保存邮件系统的配置属性和提供用户验证的信息，发送email首先要获取session对象。&lt;/p>&lt;p>(1)Session.getInstance(java.util.Properties)获取非共享的session对象&lt;/p>&lt;p>(2)Session.getDefaultInstance(java.utilProperties)获取共享的session对象&lt;/p>&lt;p>&amp;nbsp;&amp;nbsp;&amp;nbsp; 两者都必须建立Properties prop=new Properties()对象;&lt;/p>&lt;p>&lt;span>注意：&lt;/span>一般对单用户桌面应用程序使用共享Session对象。&lt;/p>&lt;p>用SMTP协议发送Email时通常要设置mail.smtp.host(mail.protocol.host协议特定邮件服务器名)属性。&lt;/p>&lt;p>prop.put("mail.smtp.host","smtp.mailServer.com");&lt;/p>&lt;p>Session mailSession=Session.getInstance(prop);&lt;/p>&lt;p>&lt;span>注意：&lt;/span>在真正使用创建的过程中，往往会让我们验证密码，这是我们要写一个密码验证类。javax.mail.Authenticator是一个抽象类，我们要写MyAuthenticator的密码验证类，该类继承Authenticator实现：&lt;/p>&lt;p>&amp;nbsp;protected PasswordAuthentication getPasswordAuthentication(){&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new PasswordAuthentication(String userName, String password);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br>&amp;nbsp; }&lt;/p>&lt;p>这时我们创建Session对象：&lt;/p>&lt;p>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Session mailSession=Session.getInstance(prop,new MyAuthenticator(userName,Password));&lt;/p>&lt;p>&lt;span>并且要设置使用验证&lt;/span>：prop.put("mail.smtp.auth","true");&lt;/p>&lt;p>&lt;span>使用 STARTTLS安全连接&lt;/span>:prop.put("mail.smtp.starttls.enable","true");&lt;/p>&lt;p>2、配置邮件会话之后，要编写消息&lt;/p>&lt;p>要编写消息就要生成javax.mail.Message子类的实例或对Internet邮件使用javax.mail.interet.MimeMessage类。&lt;/p>&lt;p>(1)建立MimeMessage对象&lt;/p>&lt;p>MimeMessage扩展抽象的Message类，构造MimeMessage对象：&lt;/p>&lt;p>MimeMessage message=new MimeMessage(mailSession);&lt;/p>&lt;p>(2)消息发送者、日期、主题&amp;nbsp;&lt;/p>&lt;p>message.setFrom(Address theSender);&lt;/p>&lt;p>message.setSentDate(java.util.Date theDate);&lt;/p>&lt;p>message.setSubject(String theSubject);&lt;/p>&lt;p>(3)设置消息的接受者与发送者（寻址接收）&lt;/p>&lt;p>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setRecipient(Message.RecipientType type , Address theAddress)、setRecipients(Message.RecipientType type , Address[] theAddress)、addRecipient(Message.RecipientType type , Address theAddress)、addRecipients(Message.RecipientType type,Address[] theAddress)方法都可以指定接受者类型，但是一般用后两个，这样可以避免意外的替换或者覆盖接受者名单。定义接受者类型：&lt;/p>&lt;p>Message.RecipientType.TO：消息接受者&lt;/p>&lt;p>Message.RecipientType.CC：消息抄送者&lt;/p>&lt;p>Message.RecipientType.BCC：匿名抄送接收者(其他接受者看不到这个接受者的姓名和地址)&lt;/p>&lt;p>(4)设置消息内容&lt;/p>&lt;p>JavaMail基于JavaBean Activation FrameWork(JAF)，JAF可以构造文本消息也可以支持附件。&lt;/p>&lt;p>设置消息内容时，要提供消息的内容类型-----即方法签名:&lt;/p></description></item></channel></rss>