def

Django模型层之单表操作

折月煮酒 提交于 2021-02-13 19:04:17
一、ORM简介 查询数据层次图解:如果操作mysql,ORM是在pymysql之上又进行了一层封装 MVC或者MTV框架中包含一个重要都部分,就是ORM,它实现了数据模型与数据库都解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效的劳动 ORM是“对象-关系-映射”的简称 # sql中的表 # 创建表: CREATE TABLE employee( id INT PRIMARY KEY auto_increment , name VARCHAR ( 20 ), gender BIT default 1 , birthday DATA , department VARCHAR ( 20 ), salary DECIMAL ( 8,2 ) unsigned, ); # sql中的表纪录 # 添加一条表纪录: INSERT employee (name,gender,birthday,salary,department) VALUES ( " alex " ,1, " 1985-12-12 " ,8000, " 保洁部 " ); # 查询一条表纪录: SELECT * FROM employee WHERE age=24 ; # 更新一条表纪录: UPDATE employee SET

利用pandas库中的read_html方法快速抓取网页中常见的表格型数据

隐身守侯 提交于 2021-02-13 17:56:54
本文转载自:https://www.makcyun.top/web_scraping_withpython2.html 需要学习的地方: (1)read_html的用法 作用:快速获取在html中页面中table格式的数据 (2) to_sql 的用法 将获得的DataFrame数据写入数据表中 (3)使用 urlencode 构造所需的url参数 摘要: 我们平常在浏览网页中会遇到一些表格型的数据信息,除了表格本身体现的内容以外,你可能想透过表格再更进一步地进行汇总、筛选、处理分析等操作从而得到更多有价值的信息,这时可用python爬虫来实现。本文采用pandas库中的read_html方法来快速准确地抓取表格数据。 本文知识点: Table型表格抓取 DataFrame.read_html函数使用 爬虫数据存储到mysql数据库 Navicat数据库的使用 1. table型表格 我们在网页上会经常看到这样一些表格,比如: QS2018世界大学排名 : 财富世界500强企业排名 : IMDB世界电影票房排行榜 : 中国上市公司信息 : 他们除了都是表格以外,还一个共同点就是当你点击右键-定位时,可以看到他们都是table类型的表格形式。 从中可以看到table类型的表格网页结构大致如下: < table class= "..." id= "..."> < thead> < tr

Python中的进程池与线程池

妖精的绣舞 提交于 2021-02-13 17:49:46
引入进程池与线程池 使用ProcessPoolExecutor进程池,使用ThreadPoolExecutor 使用shutdown 使用submit同步调用 使用submit异步调用 异步+回调函数 并发实现套接字通信 引入进程池 在学习线程池之前,我们先看一个例子 1 # from multiprocessing import Process 2 # import time 3 # 4 # def task(name): 5 # print('name',name) 6 # time.sleep(1) 7 # if __name__ == '__main__': 8 # start=time.time() 9 # p1 = Process(target=task,args=("safly1",)) 10 # p2 = Process(target=task, args=("safly2",)) 11 # p3 = Process(target=task, args=("safly3",)) 12 # 13 # p1.start() 14 # p2.start() 15 # p3.start() 16 # 17 # p1.join() 18 # p2.join() 19 # p3.join() 20 # 21 # print("main") 22 # 23 # end =

python爬虫-豆瓣电影的尝试

橙三吉。 提交于 2021-02-13 16:41:06
一、背景介绍 1. 使用工具   Pycharm 2. 安装的第三方库   requests、BeautifulSoup   2.1 如何安装第三方库   File => Settings => Project Interpreter => + 中搜索你需要的插件    3. 可掌握的小知识   1. 根据url 获取页面html内容   2. 解析html内容,选出自己需要的内容 二、代码示例   网页的样子是这个,获取排行榜中电影的名字 1 import requests 2 from bs4 import BeautifulSoup 3 4 def getHtml(): 5 url = ' https://movie.douban.com/chart ' 6 # Get获取改页面的内容 7 html = requests.get(url) 8 # 用lxml解析器解析该页面的内容 9 soup = BeautifulSoup(html.content, " lxml " ) 10 getFilmName(soup) 11 # print(soup) 12 13 14 def getFilmName(html): 15 for i in html.find_all( ' a ' , class_= " nbg " ): 16 img = i.find( ' img ' ) 17

Python 爬取豆瓣TOP250实战

邮差的信 提交于 2021-02-13 14:27:33
学习爬虫之路,必经的一个小项目就是爬取豆瓣的TOP250了,首先我们进入TOP250的界面看看。 可以看到每部电影都有比较全面的简介。其中包括电影名、导演、评分等。 接下来,我们就爬取这些数据,并将这些数据制成EXCEL表格方便查看。 首先,我们用requests库请求一下该网页,并返回他的text格式。 请求并返回成功! 接下来,我们提取我们所需要的网页元素。 点击“肖申克救赎”的检查元素。 发现它在div class = "hd" -> span class = "title"里,所以我们import beautifulsoup,来定位该元素。 同时,用相同的方法定位电影的评价人数和评分以及短评。 代码如下: soup = BeautifulSoup(res.text, ' html.parser ' ) names = [] scores = [] comments = [] result = [] # 获取电影的所有名字 res_name = soup.find_all( ' div ' ,class_= " hd " ) for i in res_name: a = i.a.span.text names.append(a) # 获取电影的评分 res_scores = soup.find_all( ' span ' ,class_= ' rating_num ' )

Python爬虫实例:爬取豆瓣Top250

我们两清 提交于 2021-02-13 14:03:22
入门第一个爬虫一般都是爬这个,实在是太简单。用了 requests 和 bs4 库。 1、检查网页元素,提取所需要的信息并保存。这个用 bs4 就可以,前面的文章中已经有详细的用法阐述。 2、找到下一个 url 地址。本例中有两种方法,一是通过 url 的规则,本例中通过比较发现,只要更改 url 中的 start 参数值就可以;二是通过下一个页的标签获取下一页的 url。代码中采用了第一种方法。 3、判断退出条件,爬虫不可能无限制循环下去。 在这个最简单的示例中,实现以上三步一个爬虫就完成了。简单到不想做其他说明,直接看代码吧。 """ 爬取豆瓣电影Top250 """ import os import re import time import requests from bs4 import BeautifulSoup def download(url, page): print (f " 正在爬取:{url} " ) html = requests.get(url).text # 这里不加text返回<Response [200]> soup = BeautifulSoup(html, ' html.parser ' ) lis = soup.select( " ol li " ) for li in lis: index = li.find( ' em ' ).text

python多线程

假如想象 提交于 2021-02-13 12:02:35
python的标准库提供两个模块:thread和threading,thread是低级模块,threading是高级模块,对thread进行了封装 1 用threading模块创建多线程 第一种方法是把一个函数传入并创建Thread实例,然后调用start方法执行; #!coding:utf-8 import random import time,threading #新线程执行的代码 def thread_run(urls): print 'Current %s in running...' %threading.current_thread().name for url in urls: print '%s --->>> %s ' %(threading.current_thread().name,url) time.sleep(random.random()) print('%s ended. '%threading.current_thread().name) print('%s is running... ' %threading.current_thread().name) t1 = threading.Thread(target=thread_run,name='Thread_1',args=(['url_1','url_2','url_3'],)) t2 =

python 根据年份,月份信息显示此月份天数

你。 提交于 2021-02-13 08:11:35
1 # 普通方法 2 year = int(input( ' 请输入年份: ' )) 3 month = int(input( ' 请输入月份(1~12): ' )) 4 if month == 2 : 5 if year % 4 == 0 and year % 100 != 0 or year % 400 == 0: 6 print ( ' 闰年29天 ' ) 7 else : 8 print ( ' 平年28天 ' ) 9 10 elif month in (4,6,9,11 ): 11 print ( ' 30天 ' ) 12 else : 13 print ( ' 31天 ' ) 1 # 方法二:函数方法 2 def y_m(year, month): 3 ''' 4 根据年份,月份信息显示此月份天数 5 :param year: 请输入年份: 6 :param month: 请输入月份(1~12): 7 :return: 天数 8 ''' 9 if month >12 or month <= 0: 10 return -1 11 if month == 2 : 12 return 29 if year % 4 == 0 and year % 100 != 0 or year % 400 == 0 else 28 13 14 if month in (4, 6, 9, 11

Akka系列(十):Akka集群之Akka Cluster

泪湿孤枕 提交于 2021-02-13 07:31:23
前言........... 上一篇文章我们讲了Akka Remote,理解了Akka中的远程通信,其实Akka Cluster可以看成Akka Remote的扩展,由原来的两点变成由多点组成的通信网络,这种模式相信大家都很了解,就是集群,它的优势主要有两点:系统伸缩性高,容错性更好。 集群概念 很多人很容易把分布式和集群的概念搞错,包括我也是,我一开始也以为它们两个是一样的概念,只是叫法不同而已,但其实不然,虽然它们在实际场景中都是部署在不同的机器上,但它们所提供的功能并不是一样的。举个简单的例子来看看它们之间的不同: 为了保持整个系列连续性,我又以抽奖为基础举一个例子: 假定我们现在抽奖流程包括,抽奖分配奖品和用户根据链接领取指定奖品,用户先抽奖然后获取奖品链接,点击链接填写相应信息领取奖品。 1.分布式: 我们现在把抽奖分配奖品和用户根据链接领取指定奖品分别部署在两台机器上,突然有一天很不幸,抽奖活动进行到一半,抽奖分配奖品那台机子所在的区域停电了,很显然,后续的用户参与抽奖就不能进行了,因为我们只有一台抽奖分配奖品的机子,但由于我们将领取奖品的业务部署在另一台机器上,所以前面那些中奖的用户还是可以正常的领取奖品,具体相关定义可参考《分布式系统概念与设计》中对分布式系统的定义。 2.集群: 现在我们还是有两台机器

elasticsearch简介和elasticsearch_dsl

岁酱吖の 提交于 2021-02-13 07:19:48
elasticsearch es是基于lucene分片(shard)存储的近实时的分布式搜索引擎 名词解释: Lucene:使用java语言编写的存储与查询框架,通过组织文档与文本关系信息进行倒排索引,内部形成多个segment段进行存储,是es的核心组件,但不具备分布式能力。 segment:Lucene内部最小的存储单元,也是es的最小存储单元,多个小segment可合为一个较大的segment,并但不能拆分。 shard:es为解决海量数据的处理能力,在Lucene之上设计了分片的概念,每个分片存储部分数据,分片可以设置多个副本,通过内部routing算法将数据路由到各个分片上,以支持分布式存储与查询。 近实时:严格讲es并不是索引即可见的数据库,首先数据会被写入主分片所在机器的内存中,再触发flush操作,形成一个新的segment数据段,只有flush到磁盘的数据才会被异步拉取到其它副本节点,如果本次搜索命中副本节点且数据没有同步的话,那么是不会被检索到的;es默认flush间隔是1s,也可通过修改refresh_interval参数来调整间隔(为提升性能和体验,一版设置30s-60s)。 分布式:es天生支持分布式,配置与使用上与单机版基本没什么区别,可快速扩张至上千台集群规模、支持PB级数据检索;通过内部路由算法将数据储存到不同节点的分片上;当用户发起一次查询时