def

pytest学习

♀尐吖头ヾ 提交于 2021-02-16 13:05:15
安装 pip install pytest pytest --version 第一个test test.py def func(x): return x + 1 def test_answer(): assert func( 3 ) == 5 运行结果如图所示: 运行 默认会执行当前目录及子目录的所有test_*.py或* _test.py文件。用例执行成功为.,失败为F pytest 静默执行 pytest -q E:\Python_Web\pytest-requests-allure \test.py # 调试方式执行,可以打印print日志等详情信息 $ pytest E:\Python_Web\pytest-requests-allure \test.py -s - v # python模块方式执行 $ python -m pytest E:\Python_Web\pytest-requests-allure \test.py # 执行单个目录下的tests $ python E:\Python_Web\pytest-requests-allure \ test类包含多个tests # pytest默认会执行所有test_前缀的函数 class TestClass( object ): def test_one(self): x = " this " assert ' h

Python的dnspython库使用指南

巧了我就是萌 提交于 2021-02-16 11:23:02
  因为平时在测试DNS的时候有些操作手动完成不方便,所以需要用到脚本,而在Python里dnspython这个用于DNS操作的库十分强大,但是无奈网上大部分资料只列举了少部分的用法,所以记录一下我平时使用到的功能,基本上已经能应付大部分的使用场景了。想具体了解dnspython可以登录 官方网站 阅读使用文档. 常用工具 最常用的用法是调用默认的resolver发送解析请求,如 from dns import resolver ans = resolver.query( " www.baidu.com " , " A " ) print ( " qname: " ,ans.qname) print ( " reclass: " ,ans.rdclass) print ( " rdtype: " ,ans.rdtype) print ( " rrset: " ,ans.rrset) print ( " response: " ,ans.response) 结果为 ( ' qname: ' , <DNS name www.baidu.com.> ) ( ' reclass: ' , 1 ) ( ' rdtype: ' , 1 ) ( ' rrset: ' , <DNS www.a.shifen.com. IN A RRset> ) ( ' response: ' , <DNS

Django之ORM

前提是你 提交于 2021-02-16 10:10:34
概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。ORM在业务逻辑层和数据库层之间充当了桥梁的作用 优势 ORM解决的主要问题是对象和关系的映射。它通常将一个类和一张表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。 ORM提供了对数据库的映射,不用直接编写SQL代码,只需操作对象就能对数据库操作数据。让软件开发人员专注于业务逻辑的处理,提高了开发效率 劣势 ORM的缺点是会在一定程度上牺牲程序的执行效率。ORM的操作是有限的,也就是ORM定义好的操作是可以完成的,一些复杂的查询操作是完成不了。ORM用多了SQL语句就不会写了,关系数据库相关技能退化... ORM与数据库的关系 Django 项目使用MySQL数据库 1.在Django项目的settings.py文件中,修改数据库配置信息 DATABASES = { ' default ' : { ' ENGINE ' : ' django.db.backends.mysql ' , #引擎 ' NAME ' : ' orm ' , #数据库名字 ' HOST ' : ' 127.0.0.1 ' , #IP

Django入门到进阶-适合Python小白的系统课程

耗尽温柔 提交于 2021-02-15 23:16:41
download: Django入门到进阶-适合Python小白的系统课程 掌握Django的基础知识,学习Web的相关扩展知识,学会开发c/s服务与apiserver服务;学习多方面非Django内置模块的配置开发方法;学习真正生产环境的服务器最终部署方案;全面阐述Web开发的各个环节的知识点,让你在使用或不使用Django进行开发的情况下都可以顺利上手基于Python的Web服务,尽量涉及绝大部分Python Web开发的生态,并且做讲解知识浅中带细,易于理解,对初学者友好 适合人群 入门Python刚刚接触Web开发的同学 做Python运维的同学(基于Django开发相关Web业务) 做Python测试的同学 技术储备要求 掌握Python基础 了解前端基础 import random 2 if __name__ == " __main__ " : # 四位數字字母考證码的生成 3 checkcode= "" # 保管考證码的變量 4 for i in range(4 ): 5 index=random.randrange(0,4) # 生成一個0~3中的數 6 if index!=i and index +1 != i: 7 checkcode +=chr(random.randint(97,122)) # 生成a~z中的一個小寫字母 8 elif index +1==

Scrapy爬取美女图片第三集 代理ip(下)

拟墨画扇 提交于 2021-02-15 13:51:31
这是本公众号获取原创保护的首篇文章,原创的肯定将支持我继续前行。现在写这篇文章的时间是晚上11:30,写完就回寝室休息了,希望更多的朋友与我一起同行 ( 当然需要一个善良的妹子的救济 )。 好了,废话不多说,咱们进入今天的主题。上一篇咱们讲解了 代理ip上篇 ,本篇咱们继续讲解 代理ip 。这一篇是上一篇的 扩展 和 优化 ,主要的改动是使用 scrapy 来进行爬取代理ip,同时演示在scrapy框架中怎么 使用mongodb 数据库,最后使用 多线程批量验证 代理ip的合理性,大大加快了速度。 这次我选择的依然是 http://www.xicidaili.com/nn/, 我之后打算做一个大的 代理ip池 ,方便之后做 分布式爬虫 。 使用firebug审查元素,查看如何解析html,上一篇我已经讲过了,所以就不详细说了,大家不明白的可以看看 代理ip上篇 。 下面咱们可以写代码了,由于咱们使用的是scrapy框架进行爬取,所以首先先生成scrapy工程,在cmd中 输入 scrapy startproject proxySpider_scrapy, 然后使用pycharm打开。 工程结构如下: db包 中db_helper: 实现的是mongodb的增删改查。 和代理ip上篇增加了proxyId字段。 detect包 中 detect_proxy: 验证代理ip的可用性的线程

scrapy爬取美女图片

此生再无相见时 提交于 2021-02-15 13:26:40
使用scrapy爬取整个网站的图片数据。并且使用 CrawlerProcess 启动。 1 # -*- coding: utf-8 -* 2 import scrapy 3 import requests 4 from bs4 import BeautifulSoup 5 6 from meinr.items import MeinrItem 7 8 9 class Meinr1Spider(scrapy.Spider): 10 name = ' meinr1 ' 11 # allowed_domains = ['www.baidu.com'] 12 # start_urls = ['http://m.tupianzj.com/meinv/xiezhen/'] 13 headers = { 14 ' User-Agent ' : ' Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 ' , 15 } 16 def num(self,url,headers): #获取网页每个分类的页数和URL格式 17 html = requests.get(url=url,headers= headers) 18 if html

Django组件之cookie、session

生来就可爱ヽ(ⅴ<●) 提交于 2021-02-15 12:28:17
一、cookie 1.1 产生背景   HTTP协议是无状态的,对服务器来说,每次的请求都是独立的。状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被保留。会话中产生的数据又是我们需要保存的,也就是说要“保持状态”,Cookie应运而生。 1.2 何为cookie   存储在客户端浏览器上的键值对。 1.3 工作原理   浏览器向服务器端发送请求, 服务器端产生cookie 随着响应发送给客户端浏览器。客户端浏览器会把Cookie保存在本地。当浏览器再次向服务器端发送请求会自动携带cookie。 1.4 cookie的覆盖   服务器端发送重复的Cookie那么会覆盖原有的Cookie。例如浏览器的第一个请求服务器端发送的Cookie是:Set-Cookie: x=X;第二请求服务器端发送的是:Set-Cookie: x=XX,那么浏览器只留下一个Cookie,即:x=XX。 1.5 查看cookie   浏览器中按F12,点network——cookies就能看到。 1.6 cookie使用方法 设置cookie 写cookie:在Httpresponse的对象上写     obj.set_cookie(key,value) def set_cookie(request): obj = HttpResponse( ' set_cookie ' )

Django组件——cookie与session

风格不统一 提交于 2021-02-15 12:14:01
一、会话跟踪技术 1、什么是会话跟踪技术   可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应。   在JavaWeb中,客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束。   在一个会话的多个请求中共享数据,这就是会话跟踪技术。例如在一个会话中的请求如下: 请求银行主页; 请求登录(请求参数是用户名和密码); 请求转账(请求参数与转账相关的数据); 请求信誉卡还款(请求参数与还款相关的数据)。   在这会话中 当前用户信息必须在这个会话中共享 的,因为登录的是张三,那么在转账和还款时一定是相对张三的转账和还款!这就说明我们必须在一个会话过程中有共享数据的能力。 2、会话路径技术使用Cookie或session完成    HTTP协议是无状态协议 ,也就是说每个请求都是独立的!无法记录前一次请求的状态。但HTTP协议中可以使用Cookie来完成会话跟踪!在Web开发中, 使用session来完成会话跟踪 , session底层依赖Cookie技术 。 二、Cookie 1、Cookie概述 (1)什么是Cookie?   Cookie翻译成中文是小甜点,小饼干的意思。在HTTP中它表示服务器送给客户端浏览器的小甜点。其实Cookie是key-value结构,类似于一个python中的字典。  

scrapy框架爬取妹子图片

孤人 提交于 2021-02-15 12:09:52
首先,建立一个项目#可在github账户下载完整代码:https://github.com/connordb/scrapy-jiandan2 scrapy startproject jiandan2 打开pycharm,把建立的此项目的文件打开,在中断新建一个爬虫文件 scrapy genspide jiandan jandan.net/ooxx 在Items中配置我们需要的信息 import scrapy class Jiandan2Item(scrapy.Item): # define the fields for your item here like: img_url = scrapy.Field() # 图片的链接 img_name = scrapy.Field() 在jian_pan 文件开始我们对网页的解析 import base64 from jiandan2 import item class JiandanSpider(scrapy.Spider): name = 'jiandan' allowed_domains = ['jandan.net'] start_urls = ['http://jandan.net/ooxx'] def parse(self, response): img = response.xpath('//div[@id="comments

爬取妹子图片

谁说胖子不能爱 提交于 2021-02-15 11:08:24
废话不多说,直接上代码 非原创 原作者记不得了 import requests from bs4 import BeautifulSoup def imgurl(url): res = requests.get(url) soup = BeautifulSoup(res.text, 'html.parser') # 获取总页数 page = int(soup.select('.pagenavi span')[-2].text) # 获取图片链接 a = soup.select('.main-image a')[0] src = a.select('img')[0].get('src') meiziid = src[-9:-6] print('开始下载妹子:',format(meiziid)) for i in range(1, page+1): i = '%02d' % i img = src.replace('01.jpg', str(i)+'.jpg') headers = { 'User-Agent':'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)', 'Referer':'http://www.mzitu.com' } #此请求头破解防盗链 response = requests.get(img,headers