python3高级编程
1. SMTP发送邮件
internet相关协议:
http:网页访问相关,httplib,urllib,xmlrpclib
ftp:文件传输相关, ftplib, urllib
nntp:新闻和帖子相关, nntplib
smtp:发送邮件相关, smtplib
pop3:接收邮件相关, poplib
imap4:获取邮件相关, imaplib
telnet:命令行相关, telnetlib
gopher:信息查找相关, gopherlib, urllib
使用smtp协议发送文本邮件:


注意:需要配置有奖发送方的授权
配置使用ssl登录发送方授权
详情如下

使用smtp发送html格式邮件:


使用smtp发送附件邮件:


2.python3高级编程之socket
socket是用于在计算机进程之间通过套接字进行通信。
例:
socket
server.py
client.py
服务端server.py的代码如下:

客户端client.py的代码如下:

开启服务端:

这时服务端以守护进程的方式等待客户端网络请求
开启客户端:

结果如下:
服务端收到了客户端的请求,客户端链接服务器成功


3.python3高级编程之使用PyMySQL操作数据库
PyMySQL的下载安装:
在python3根目录下使用pip install PyMySQL安装最新版的PyMySQL
如下:

编码测试pymysql是否安装成功:

注意:文件不能命名为pymysql.py,如果该文件中使用了import pymysql则永远找不到pymysql模块
例:使用pymysql创建数据表
#!/usr/bin/python3
# -*- coding:UTF-8 -*-
import pymysql
conn = pymysql.connect('127.0.0.1', 'root', 'root', 'empirecms')
cursor = conn.cursor()
sql = 'create table if not exists test_python(' + \
'id int(8) primary key auto_increment,' + \
'name varchar(32) not null comment "username",' + \
'created_at int(10) not null default 0' + \
')engine=innoDB'
cursor.execute(sql)
conn.close()
注意:字符串拆分成多行书写时应在行末尾添加+ \
例:使用pymysql插入数据
#!/usr/bin/python3
# -*- coding:UTF-8 -*-
import pymysql
import time
conn = pymysql.connect('127.0.0.1', 'root', 'root', 'empirecms')
cursor = conn.cursor()
now = time.time()
sql = "insert into test_python(name, created_at) values('liudaoqiang', '%s')" % (now)
try:
cursor.execute(sql)
conn.commit()
except:
conn.rollback()
conn.close()
例:使用pymysql查询数据表
#!/usr/bin/python3
# -*- coding:UTF-8 -*-
import pymysql
conn = pymysql.connect('127.0.0.1', 'root', 'root', 'empirecms')
cursor = conn.cursor()
sql = "select * from test_python"
cursor.execute(sql)
data = cursor.fetchall()
for row in data:
name = row[1]
created_at = row[2]
print("name=%s and created_at=%d" % (name, created_at))
conn.close()
注意:使用fetchall()和fetchone()得到结果每一行数据都是元组而不是字典,所有取值用切片或数字下表
4.python3高级编程之cgi程序
对于python的cgi程序,首先应该配置python与web服务器的通信;以nginx为例,需要通过uwsgi完成
安装uwsgi:
pip install uwsgi
或安装最新版:
pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz


安装失败提示 AttributeError: module 'os' has no attribute 'uname'
5. python高级编程之网络爬虫scrapy框架
在windows上基于python3.6安装scrapy
pip install scrapy

发现报错,提示需要安装Microsoft Visual C++ 14.0即Microsoft Visual 2015,后台还带上了下载地址
http://landinghub.visualstudio.com/visual-cpp-build-tools
通过该下载地址下载运行库文件并安装

Microsoft Visual C++ 14.0安装成功后,再次运行pip install Scrapy安装scrapy,安装成功

使用scrapy创建一个scrapy项目
scrapy startproject scrapy_test

创建后的scrapy项目结构如下:
scrapy_test(项目跟目录)
scrapy.cfg(项目配置文件)
scrapy_test(项目的主模块)
__init__.py
items.py
middlewares.py
pipelines.py
settings.py(项目主模块配置文件)
spiders(爬虫模块)
__init__.py
紧接着,准备在新创建的scrapy项目中编写spider程序:
修改items.py如下

在spider目录中编写自己想要的spider

好了,现在要运行我们的spider程序了
scrapy crawl dmoz

发现提示我们win32api模块没有安装,使用pip install pypiwin32 安装pypiwin32模块

安装pypiwin32成功,再次运行scrapy crawl dmoz 开始爬虫程序
D:\test\scrapy\scrapy_test>scrapy crawl dmoz
2017-09-01 14:20:01 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapy_test)
2017-09-01 14:20:01 [scrapy.utils.log] INFO: Overridden settings: {'BOT_NAME': 'scrapy_test', 'NEWSPIDER_MODULE': 'scrap
y_test.spiders', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['scrapy_test.spiders']}
2017-09-01 14:20:01 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.corestats.CoreStats',
'scrapy.extensions.telnet.TelnetConsole',
'scrapy.extensions.logstats.LogStats']
2017-09-01 14:20:02 [scrapy.middleware] INFO: Enabled downloader middlewares:
['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware',
'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
'scrapy.downloadermiddlewares.retry.RetryMiddleware',
'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
'scrapy.downloadermiddlewares.stats.DownloaderStats']
2017-09-01 14:20:02 [scrapy.middleware] INFO: Enabled spider middlewares:
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
'scrapy.spidermiddlewares.referer.RefererMiddleware',
'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
'scrapy.spidermiddlewares.depth.DepthMiddleware']
2017-09-01 14:20:02 [scrapy.middleware] INFO: Enabled item pipelines:
[]
2017-09-01 14:20:02 [scrapy.core.engine] INFO: Spider opened
2017-09-01 14:20:02 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min
)
2017-09-01 14:20:02 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2017-09-01 14:20:03 [scrapy.core.engine] DEBUG: Crawled (403) <GET http://www.dmoz.org/robots.txt> (referer: None)
2017-09-01 14:20:03 [scrapy.core.engine] DEBUG: Crawled (403) <GET http://www.dmoz.org/Computers/Programming/Languages/P
ython/Books/> (referer: None)
2017-09-01 14:20:03 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <403 http://www.dmoz.org/Computers/Prog
ramming/Languages/Python/Books/>: HTTP status code is not handled or not allowed
2017-09-01 14:20:03 [scrapy.core.engine] DEBUG: Crawled (403) <GET http://www.dmoz.org/Computers/Programming/Languages/P
ython/Resources/> (referer: None)
2017-09-01 14:20:03 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <403 http://www.dmoz.org/Computers/Prog
ramming/Languages/Python/Resources/>: HTTP status code is not handled or not allowed
2017-09-01 14:20:03 [scrapy.core.engine] INFO: Closing spider (finished)
2017-09-01 14:20:03 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 734,
'downloader/request_count': 3,
'downloader/request_method_count/GET': 3,
'downloader/response_bytes': 3525,
'downloader/response_count': 3,
'downloader/response_status_count/403': 3,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2017, 9, 1, 6, 20, 3, 937597),
'httperror/response_ignored_count': 2,
'httperror/response_ignored_status_count/403': 2,
'log_count/DEBUG': 4,
'log_count/INFO': 9,
'response_received_count': 3,
'scheduler/dequeued': 2,
'scheduler/dequeued/memory': 2,
'scheduler/enqueued': 2,
'scheduler/enqueued/memory': 2,
'start_time': datetime.datetime(2017, 9, 1, 6, 20, 2, 456542)}
2017-09-01 14:20:03 [scrapy.core.engine] INFO: Spider closed (finished)
到此,ok,scrapy运行成功!!!
现在,做一个简单的案例,使用scrapy抓取京东首页的SBI图片列表区域数据并将数据保存到json文件中
创建scrapy项目:
scrapy startproject jdsbi

定义scrapy数据模型:
在items.py中定义三个字段,分别为title, promo, image
# -*- coding: utf-8 -*-
# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html
import scrapy
class JdsbiItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field()
promo = scrapy.Field()
image = scrapy.Field()
pass
生成spider程序:
scrapy genspider jdsbispider www.jd.com

编写spider程序处理逻辑:
# -*- coding: utf-8 -*-
import scrapy
from jdsbi.items import JdsbiItem
class JdsbispiderSpider(scrapy.Spider):
name = 'jdsbispider'
allowed_domains = ['www.jd.com']
start_urls = ['http://www.jd.com/']
def parse(self, response):
node_list = response.xpath("//div[@class='pt_bi_4']/a")
print(node_list)
for node in node_list:
title = node.xpath("./p[@class='pt_bi_tit']/text()").extract()
promo = node.xpath("./p[@class='pt_bi_promo']/text()").extract()
image = node.xpath("./img/@src").extract()
item = JdsbiItem()
item["title"] = title[0]
item["promo"] = promo[0]
item["image"] = image[0]
yield item
pass
修改settings.py配置spider程序不遵从网站的robot.txt

使用scrapy crawl jdsbispider运行spider程序:
发现共抓取到0个item,原因是这些元素是ajax加载,所有没有抓取到!
python3高级编程的更多相关文章
- python3 高级编程(三) 使用@property
@property装饰器就是负责把一个方法变成属性调用的. @property广泛应用在类的定义中,可以让调用者写出简短的代码,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性 cl ...
- python3 高级编程(二) 动态给类添加方法功能
class Student(object): pass 给实例绑定一个属性: >>> s = Student() >>> s.name = 'Michael' # ...
- python3 高级编程(一) 使用__slots__
使用__slots__的目的:限制实例的属性 用法:定义class的时候,定义一个特殊的__solts__变量,来限制实例能添加的属性. class Student(object): __slots_ ...
- Python3 高级编程技巧(部分)
目录: 在列表.字典.集合中筛选数据 为元组元素命名 通过列表.元组创建字典 字典排序 寻找字典的公共键 让字典保持有序 生成器函数 yield协程 同时遍历值与下标 在列表.字典.集合中筛选数据 很 ...
- python高级编程读书笔记(一)
python高级编程读书笔记(一) python 高级编程读书笔记,记录一下基础和高级用法 python2和python3兼容处理 使用sys模块使程序python2和python3兼容 import ...
- Python Flask高级编程
第1章 课程导语介绍课程的内容1-1 开宗明义 试看1-2 课程维护与提问 第2章 Flask的基本原理与核心知识本章我们首先介绍Python官方推荐的最佳包与虚拟环境管理工具:Pipenv.接着我们 ...
- Python高级编程-Python一切皆对象
Python高级编程-Python一切皆对象 Python3高级核心技术97讲 笔记 1. Python一切皆对象 1.1 函数和类也是对象,属于Python的一等公民 ""&qu ...
- 第三章:Python高级编程-深入类和对象
第三章:Python高级编程-深入类和对象 Python3高级核心技术97讲 笔记 3.1 鸭子类型和多态 """ 当看到一直鸟走起来像鸭子.游泳起来像鸭子.叫起来像鸭子 ...
- 第九章:Python高级编程-Python socket编程
第九章:Python高级编程-Python socket编程 Python3高级核心技术97讲 笔记 9.1 弄懂HTTP.Socket.TCP这几个概念 Socket为我们封装好了协议 9.2 cl ...
随机推荐
- P1217 [USACO1.5]回文质数 Prime Palindromes(技巧+暴力枚举+线性筛)
技巧:就是偶数位的回文数字一定不是质数---------证明:奇数位之和sum1==偶数位之和sum2的数字可以被11整除.(11除外,这是一个坑点) 最高位,最低位必须是 1, 3, 7, 9 暴力 ...
- LeetCode练习3 找出一个字符串中最大不重复子字符串的长度
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- hadoop学习笔记肆--元数据管理机制
1.首先,认识几个名词 (1).NameNode中读.写.以及DataNode映射等信息叫做“元数据” ,NameNode元数据存放位置有.内存.fsimage.edits log三个位置. (2). ...
- javascript之传输加密
为什么要使用javascript加密呢?服务端加密远远不够,客户端或者浏览器端也需要加密,以此保证传输信息过程的安全. 今天就我工作中说说这么几种加密算法及其对应的应用场景,如下所示: base64 ...
- Linux VNC安装
cat /etc/centos-release CentOS Linux release 7.4.1708 (Core) uname -r 3.10.0-693.el7.x86_64 VNC下载:ht ...
- mysql 实现树形的遍历
前言:关于多级别菜单栏或者权限系统中部门上下级的树形遍历,oracle中有connect by来实现,mysql没有这样的便捷途径,所以MySQL遍历数据表是我们经常会遇到的头痛问题,下面通过存储过程 ...
- EntityFramework Core并发深挖详解,一纸长文,你准备好看完了吗?
前言 之前有关EF并发探讨过几次,但是呢,博主感觉还是有问题,为什么会觉得有问题,其实就是理解不够透彻罢了,于是在项目中都是用的存储过程或者SQL语句来实现,利用放假时间好好补补EF Core并发的问 ...
- 第一次在新西兰组织技术社区活动:Monkeyfest2018
从3月份登陆到现在,转眼间已经8个月了.在6个月的时候我就想写篇文总结下近期的一些状况,一直拖到现在.因为近期一直在筹备我第一次社区活动——Monkeyfest 2018,占用了比较多的时间.这是一个 ...
- Java字符串操作及与C#字符串操作的不同
每种语言都会有字符串的操作,因为字符串是我们平常开发使用频率最高的一种类型.今天我们来聊一下Java的字符串操作及在某些具体方法中与C#的不同,对于需要熟悉多种语言的人来说,作为一种参考.进行诫勉 首 ...
- 【JS复习笔记】03 继承(从ES5到ES6)
前言 很久以前学习<Javascript语言精粹>时,写过一个关于js的系列学习笔记. 最近又跟别人讲什么原型和继承什么的,发现这些记忆有些模糊了,然后回头看自己这篇文章,觉得几年前的学习 ...