python
文章平均质量分 69
差点是美男****
没
展开
-
使用python处理23个G(约一千万条)的文本所需时间,线程Thread跟协程async、await对比
使用的都是python内置的库跟函数,每一个文件使用一个线程,读取一行先截取字符串判断name是否等于张三,后用json模块将每一行转换为dict类型获取时间戳转换为“年-月-日”格式放到一个字典里面,每一个独立的日期为key,值为列表套字典格式,筛选出来的完全足够放在内存中,而不用先写入文件。2、 将排序好的结果重新写⼊新的⽂件,规则如下: 按照 timestamp 以天为维度组织⽂件,新⽂件的命名规则为 年-月-日,例如(2022-1-12), 将所有位于同⼀天的数据存放于同⼀个⽂件中。...原创 2022-08-23 22:34:06 · 1284 阅读 · 3 评论 -
python高并发: 进程线程协程的一起使用实例
高并发,使用进程开线程开协程方式向网站发送请求,查看请求量import geventfrom gevent import monkeyfrom threading import Threadfrom multiprocessing import Processimport requestsmonkey.patch_socket()url = 'https://'def task(): """任务""" for i in range(10): r = re原创 2021-07-27 16:42:47 · 416 阅读 · 0 评论 -
python寻找列表最大连续非空序列跟空序列(双色球最大连续,最大遗漏)
原因:某位朋友的老板喜欢玩双色球,需要做统计,不知道有什么用,特地托我帮忙任务部分截图图如下:灰色部分为需要统计最大连续、最大遗漏数下面是代码:import copys = '''18.18.......'''l = s.split('\n') # 以换行符分割:excel表格每一行都有一个换行符# 最大连续l1 = []l2 = []for i in l: if i != '': l1.append(i) elif i == ''原创 2021-07-27 11:00:26 · 411 阅读 · 1 评论 -
python通用装饰器
def f1(func): def f2(*args, **kwargs): # 逻辑 return func(*args, **kwargs) return f2@f1 # 等价于 test = f1(test)test(a,b)原创 2021-02-18 15:14:09 · 115 阅读 · 0 评论 -
python协程:gevent模块
协程比线程切换开销小import timeimport gevent # 协程:当一个任务需要耗时from gevent import monkey # 补丁monkey.patch_all() # 将耗时的代码转自动换成gevent.sleep(),比如time.sleep()def t1(a): while 1: print(a) time.sleep(1) # 会自动转换成gevent.sleep(1)def t2(b): w原创 2021-02-07 22:32:48 · 138 阅读 · 0 评论 -
python生成器应用:斐波那契数列数列
生成器是一种特殊的迭代器,关键是yield,执行yield后会暂停,下次从下一行执行,# 定义了yield的函数称为生成器对象(一种特殊的迭代器)def fun(num): '''生成器应用:斐波那契数列''' print('开始') c = 0 d = 1 while c < num: yield c # 返回c后暂停,下次再调用会从下一行执行:c, d = d, c + d c, d = d, c + d原创 2021-02-07 21:20:43 · 231 阅读 · 0 评论 -
python自定义迭代器应用:生成斐波那契数列
再类中,定义了__iter__(self)方法就成为了可迭代对象,再在定义一个__next__(self)方法最终成为迭代器迭代器是在你要用的时候再给你造一个值,相当于买手抓饼,你说要买的时候人家才给你现场做,节约了内存。class A: def __init__(self, num): self.num = num self.x = 0 self.y = 1 def __iter__(self): # 必须:定义了__iter__()原创 2021-02-07 20:48:49 · 256 阅读 · 0 评论 -
flask使用七牛云存储图片并展示
注册七牛云,实名认证,点击对象存储,创建公开空间找到python SDK,在项目下创建一个util.py文件,粘贴下去util.py修改如下from qiniu import Auth, put_file, etag, put_dataimport qiniu.configimport randomimport datetimefrom werkzeug.utils import secure_filename # 生成安全的文件名def upload(filestorage): .原创 2020-10-05 16:50:56 · 364 阅读 · 1 评论 -
python hashlib密码加密展示
python几种加密算法长度,在数据库创建表时,对比设置varchar的大小,常用sha256,不长不短import hashlibs = '1213520abcd'print('md5', hashlib.md5(s.encode('utf-8')).hexdigest())print('sha1', hashlib.sha1(s.encode('utf-8')).hexdigest())print('sha224', hashlib.sha224(s.encode('utf-8')).he原创 2020-08-29 12:15:39 · 155 阅读 · 0 评论 -
django2.2配置富文本编辑器markdown,并渲染到前端
pip install django-mdeditor在INSTALLED_APPS设置中注册 INSTALLED_APPS = [ ... ' mdeditor ', ]settings配置MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads') MEDIA_URL = '/media/'根urls.pyurlpatterns = [ ... url(r'mdeditor/',.原创 2020-08-05 21:44:03 · 656 阅读 · 0 评论 -
django2.2网站文章浏览量的实现
使用session解决思路:尝试获取session值,如果session值不等于本片文章的id,则浏览量加1, 然后使用本片文章id设置session值,使用了str函数,并设置过期时间# 尝试获取session值,如果session值不等于本片文章的id,则浏览量加1# 然后使用本片文章id设置session值,使用了str函数,并设置过期时间if request.session.get(str(blog.bid)) != blog.bid: # 浏览量加一 blog.bbrowse +=原创 2020-08-05 14:53:57 · 149 阅读 · 0 评论 -
django2.2处理跨域请求
根据django-cors-headers官网配置先安装:pip install django-cors-headers只需要在settings下配置在apps下注册INSTALLED_APPS = [ # 跨域的解决 'corsheaders',]在中间件下MIDDLEWARE = [ # 跨域的解决 'corsheaders.middleware.CorsMiddleware', # 放在前面 '......',]其他配置,主要是配置原创 2020-07-30 09:26:44 · 400 阅读 · 0 评论 -
django2.2 RES框架接口生成文档
1、pip install coreapi2、settings配置REST_FRAMEWORK = {‘DEFAULT_SCHEMA_CLASS’: ‘rest_framework.schemas.coreapi.AutoSchema’,}3、根路由urls.pyfrom rest_framework.documentation import include_docs_urls # 接口文档urlpatterns = [path(‘docs/’, include_docs_urls(ti原创 2020-07-29 13:51:38 · 200 阅读 · 0 评论 -
django2.2 REST框架自定义分页类
在app下新建一个py文件from rest_framework.pagination import PageNumberPagination, OrderedDictfrom rest_framework.response import Response# 自定义分页类class MyPage(PageNumberPagination): page_size = 5 # 每页数目,为空则表示禁用分页 page_size_query_param = 'page_size' #原创 2020-07-29 11:39:51 · 155 阅读 · 0 评论 -
django2.2项目部署上线
使用的是Ubuntu18.04,以下简称服务器具体步骤(非root用户)在服务器上安装python虚拟环境包virtualenv安装nginx, 数据库先使用python内嵌的创建python虚拟环境将项目上传到服务器,在虚拟环境里安装需要的包配置uwsgi, nginx安装虚拟环境,sudo pip3 install virtualenv表示全部用户都可以使用,不加sudo表示当前用户可用pip3 install virtualenv安装nginxsudo apt install原创 2020-07-26 14:15:22 · 246 阅读 · 0 评论 -
乌班图18.04 pip install uwsgi出错
sudo apt install gccpip3 install python3-devpip3 install uwsgi原创 2020-07-22 16:40:05 · 262 阅读 · 0 评论 -
乌班图18.04:django项目上传到服务器,运行后找不到模板,上传前能运行
TEMPLATES改为小写templates,windows下可能不区分大小写,但Linux会原创 2020-07-22 16:14:54 · 104 阅读 · 0 评论 -
做了个简单的post请求爬虫,爬取广东省科技厅关于创新的新闻
朋友的课程设计需要用到数据,叫我帮个忙,好久没做爬虫了,有些生了,当时分析网页发现是post请求,然后去找了请求的地址,发现from-data要传的数据没多少,发生变化的只有keywords跟page,那简单了,你要什么,我就给你什么,返回json数据,loads成字典,拿到详情页url,再requests发get请求,响应结果用lxml的etree.HTML转换给xpah提取数据,数据直接插入数据库,好了。import requestsimport jsonimport reimport time原创 2020-07-19 18:56:52 · 247 阅读 · 1 评论 -
django2.2邮箱激活账号,使用celery异步发送邮件
邮箱激活账号:生成加密连接,发送邮件,用户点击连接,然后解密,激活账号使用邮箱激活,外国用户也能注册导入,需要pip install itsdangerous安装生成token的第三方库from itsdangerous import TimedJSONWebSignatureSerializer # 生成tokenfrom itsdangerous import SignatureExpired # token超时发生的异常加密 serializer = TimedJSONWeb原创 2020-07-16 10:46:53 · 301 阅读 · 0 评论 -
django2.2缓存的设置
django缓存,适用于页面经常被访问,但页面数据不会经常改变的地方数据库缓存settings配置# 数据库缓存配置,然后python manage.py createcachetable生成缓存表CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.db.DatabaseCache', # 缓存表的名字 'LOCATION': 'my_cache_table'原创 2020-07-15 16:18:07 · 139 阅读 · 0 评论 -
django2.2自定义中间件
中间件相当于中介,请求或响应都要先经过它,可以在请求调用前判断是否登录,是否时黑名单上的ip,响应前可以判断用户发表的评论是否合规上面的,出错了只显示给管理员上面的实现很简单:创建、注册自定义中间件,在app目录或其目录下新建py文件,文件名随意。 导入from django.utils.deprecation import MiddlewareMixin,自定义类,继承MiddlewareMixin在settings里面注册自定义中间件代码实现我在我的app目录下新建了 MyMiddiewa原创 2020-07-15 11:25:50 · 210 阅读 · 0 评论 -
django2.2文件上传
前端页面<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><h1>文件上传</h1> <!--将文件以二进制的形式上传--><form action="" method="p.原创 2020-07-14 17:43:54 · 189 阅读 · 0 评论 -
django2.2用户认证----注册、登录、修改密码、退出登录
项目截图运行截图1、建立路由注意:login跟logout是django用户认证的内置函数,不要使用,不然会冲突报错from user import viewsapp_name = 'user'urlpatterns = [ path('', views.index, name="index"), path('register/', views.register, name='register'), path('login/', views.user_log原创 2020-07-14 11:55:49 · 615 阅读 · 0 评论 -
django2.2发送邮件
发送邮件首先登录你的邮箱开启smtp服务(以QQ邮箱为例)登录–设置—账户—开启服务—拿到授权码settings.py 配置# 发送邮件# 次要# EMAIL_USE_SSL = True 或EMAIL_USE_TLS = True 控制是否安全连接,只能有一个# EMAIL_PORT = 666 smtp服务的端口号# EMAIL_FROM = '12523@qq.com' 收件人看到的发送者名称,没有默认是EMAIL_HOST_USER# 必须EMAIL_HOST =原创 2020-07-14 11:20:39 · 181 阅读 · 0 评论 -
scrapy-redis爬取房天下658个城市的新房跟二手房信息
今天做了一个爬取房天下这个网站的爬虫,爬取了上面全国658个城市的新房跟二手房的信息。分析网站房天下:https://www.fang.com/SoufunFamily.htm,爬虫从这个页面开始按省份分组,请求每个城市的链接,然后分别请求页面上买新房跟买二手房的链接,进入到页面,然后按每个房子的信息分组,接着就可以提取信息了。全部代码如下爬虫.py(提取数据)# -*- coding: utf-8 -*-import scrapyimport copy # 每个方法间传递数据要用到深原创 2020-06-19 23:50:45 · 622 阅读 · 5 评论 -
使用selenium爬取拉勾网全国python职位信息
selenium做的爬虫一般很稳定,很难被发现,爬取一些做有反爬措施的网站是个不错的选择,但是对于反爬措施很厉害的网站还是会被发现的,可能要添加随机代理,还有随机延迟。拉钩网的反爬做的很厉害,做这个之前我试过快速的点击下一页下一页,十次后就需要你登录才能查看了,这反爬做的。不多说,急头白脸的做了一个小爬虫from selenium import webdriver # 浏览器from lxml import etree # 提取数据import time # 请求延迟import re原创 2020-06-15 14:06:15 · 394 阅读 · 0 评论 -
python实现插入排序
插入排序(今天用一天时间来复习基本的几个排序,基本都是使用双层循环,然后对下标交换位置来排序)def li_sort(li): '''插入排序: 分成两个序列,假设第0个为有序序列, 每次将后面无序的第0(整个列表从1开始)个比较, 判断是否需要交换位置,以此类推 ''' l = len(li) for j in range(1, l): #重复while循环对整个列表排序 i = j while i>0: #while循环排序一次原创 2020-06-07 13:23:50 · 111 阅读 · 0 评论 -
python实现选择排序
选择排序(解释都在源码里)选择排序思想第一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零'''选择排序内层循环:第一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小元素,然后放到已排序的序列的末尾。外层循环:以此类推,直到全部待排序的数据元素的个数为零'''#将列表分成有序跟无序两部分,#每原创 2020-06-07 10:36:43 · 130 阅读 · 0 评论 -
python实现简单冒泡排序
冒泡排序思想比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。代码如下'''冒泡排序算法的原理:1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3、针对所有的元原创 2020-06-06 23:40:25 · 358 阅读 · 0 评论 -
scrapy-redis分布式爬虫,爬取当当网图书信息
前期准备虚拟机下乌班图下redis:url去重,持久化mongodb:保存数据PyCharm:写代码谷歌浏览器:分析要提取的数据爬取图书每个分类下的小分类下的图书信息(分类标题,小分类标题,图书标题,作者,图书简介,价格,电子书价格,出版社,封面,图书链接)思路:按每个大分类分组,再按小分类分组,再按每本书分组,最后提取数据下面是代码爬虫代码# -*- coding: utf-8 -*-import scrapy# 额外导入以下类from scrapy_redis.spiders原创 2020-05-19 16:41:23 · 458 阅读 · 3 评论 -
scrapy+redis+mongodb爬取苏宁商城图书价格
之前的爬取苏宁图书信息的时候因为懒得分析图书的价格,所有今天把图书的价格给弄了图书的价格是动态生成的,不过稍稍花点时间就分析出来了,本来长长的·一大串,慢慢删减慢慢试就剩一个,看下图然后我在网页源码发现了一串数字,提取出来放到请求的url就是得到图书的价格了下面是代码爬虫代码# -*- coding: utf-8 -*-import scrapyimport jsonclass SuningSpider(scrapy.Spider): name = 'suning'原创 2020-05-18 19:24:18 · 337 阅读 · 2 评论 -
scrapy-redis实现url去重
scrapy-redis去重1 、先安装模块pip install scrapy-redis2、在你的scrapy爬虫的settings.py中加上一下几行即可#一个去重的类,用来将url去重DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"#一个队列SCHEDULER = "scrapy_redis.scheduler.Scheduler"#是否持久化(爬完后不会再爬了,像一些固定的数据)SCHEDULER_PERSIST原创 2020-05-18 14:33:34 · 555 阅读 · 0 评论 -
scrapy使用CrawlSpider方式爬取百度贴吧帖子跟图片
今天用CrawlSpider方式爬取百度贴吧,不得不说,这种方法太牛逼了,只用了不到二十行的代码创建项目 scrapy startproject 项目名进入项目然后生成爬虫 scrapy genspider -t crawl 爬虫 爬取范围主要代码# -*- coding: utf-8 -*-import scrapyfrom scrapy.linkextractors import LinkExtractorfrom scrapy.spiders import CrawlSpider原创 2020-05-17 13:52:26 · 320 阅读 · 0 评论 -
python scrapy请求手机版QQ空间数据
先在浏览器登录,然后找到请求的数据的url,将里面的requests Headers的cookies拿出来放到代码里面去就ok了。QQ空间截图全部代码(现在的cookies数据是假的,想要的话用自己QQ弄)# -*- coding: utf-8 -*-import scrapyimport reclass QqLoginSpider(scrapy.Spider): name = 'qq_login' allowed_domains = ['qq.com'] start原创 2020-05-16 15:37:10 · 201 阅读 · 0 评论 -
scrapy深入爬取苏宁易购图书信息
深入爬取图书信息,大分类到小分类再到详细信息页(从中午放学一直做到了晚上18点,无线火力都不玩了)主要代码如下# -*- coding: utf-8 -*-import scrapyfrom copy import deepcopyimport reclass SuningSpider(scrapy.Spider): name = 'suning' allowed_domains = ['suning.com'] start_urls = ['https://boo原创 2020-05-15 22:22:35 · 463 阅读 · 1 评论 -
python爬虫+可视化GitHub上标星最高的python项目
python爬虫+可视化GitHub上标星最高的python项目大三,刚开始学习python,把学习过程都记录下来,今天第一次写博客,利用一点时间做了这个项目,话不多说直接上图上代码。`import requestsimport pygalfrom pygal.style import LightColorizedStyle as lcs,LightenStyle as ls#执行A...原创 2020-01-12 20:38:42 · 1347 阅读 · 2 评论