大家好,今天小编关注到一个比较有意思的话题,就是关于python 快速搭建网站的问题,于是小编就整理了3个相关介绍python 快速搭建网站的解答,让我们一起看看吧。
go和python语言建网站不需要web服务器吗?
Web服务器也是一个应用程序,这个应用程序打开了TCP的80端口,通过HTTP协议和浏览器交互。
Python和Go有非常成熟的类库,可以用很短的程序来实现一个Web服务器的功能(打开80端口通过HTTP协议与浏览器交互)。基本上任何服务器端的语言都可以编写一个Web服务器,但是Python和Go更容易实现。Web服务器也是一个应用程序,这个应用程序打开了TCP的80端口,通过HTTP协议和浏览器交互。Python和Go有非常成熟的类库,可以用很短的程序来实现一个Web服务器的功能(打开80端口通过HTTP协议与浏览器交互)。可以这样说,基本上任何服务器端的语言都可以编写一个Web服务器,但是Python和Go更容易实现。Web服务器也是一个应用程序,这个应用程序打开了TCP的80端口,通过HTTP协议和浏览器交互。Python和Go有非常成熟的类库,可以用很短的程序来实现一个Web服务器的功能(打开80端口通过HTTP协议与浏览器交互)。可以这样说,基本上任何服务器端的语言都可以。如何用Python搭建一个网站?
Python搭建网站,利用现成的框架还是挺简单的。在这里举一个例子-利用Flask搭建一个网站。
Flask
Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask创建一个应用很简单,只需要一行代码就可以创建一个应用。一个最小的应用看起来像这样:
直接执行python hello.py,就可以看到页面就可以访问了,这只是官方给出的一个示例,方便学习。
应用初始化
所有 Flask 程序都必须创建一个程序实例。 Web 服务器使用一种名为 Web 服务器网关接口(Web Server Gateway Interface, WSGI)的协议,把接收自客户端的所有请求都转交给这个对象处理。程序实例是 Flask 类的对象,经常使用下述代码创建:
Flask 类的构造函数只有一个必须指定的参数,即程序主模块或包的名字。在大多数程序中, Python 的 __name__ 变量就是所需的值。
路由和视图函数
客户端(例如 Web 浏览器)把请求发送给 Web 服务器, Web 服务器再把请求发送给 Flask程序实例。程序实例需要知道对每个 URL 请求运行哪些代码,所以保存了一个 URL 到Python 函数的映射关系。处理 URL 和函数之间关系的程序称为路由。在 Flask 程序中定义路由的最简便方式,是使用程序实例提供的 app.route 修饰器,把修饰的函数注册为路由。下面的例子说明了如何使用这个修饰器声明路由:
index() 函数注册为程序根地址的处理程序。如果部署程序的服务器域名为 www.example.com,在浏览器中访问 后, 会触发服务器执行 index() 函数。这个函数的返回值称为响应,是客户端接收到的内容。如果客户端是 Web 浏览器, 响应就是显示给用户查看的文档。
启动服务器
程序实例用 run 方法启动 Flask 集成的开发 Web 服务器:
__name__=='__main__' 是 Python 的惯常用法,在这里确保直接执行这个脚本时才启动开发Web 服务器。 如果这个脚本由其他脚本引入,程序假定父级脚本会启动不同的服务器,因此不会执行 app.run()。服务器启动后, 会进入轮询,等待并处理请求。轮询会一直运行,直到程序停止,比如按Ctrl-C 键。
Flask开发的网站实例
本示例中网站的结构如下
启动服务器界面
访问WEB页面
整个是利用Flask自己搭建的一个WEB页面,数据库试过mysql和mongodb都可以正常访问。整体感觉Flask的学习成本会比Django低,而且也比Django更灵活。
如何利用Python抓取静态网站及其内部资源?
这个非常简单,requests+BeautifulSoup组合就可以轻松实现,下面我简单介绍一下,感兴趣的朋友可以自己尝试一下,这里以爬取糗事百科网站数据(静态网站)为例:
1.首先,安装requets模块,这个直接在cmd窗口输入命令“pip install requests”就行,如下:
2.接着安装bs4模块,这个模块包含了BeautifulSoup,安装的话,和requests一样,直接输入安装命令“pip install bs4”即可,如下:
3.最后就是requests+BeautifulSoup组合爬取糗事百科,requests用于请求页面,BeautifulSoup用于解析页面,提取数据,主要步骤及截图如下:
这里假设爬取的数据包含如下几个字段,包括用户昵称、内容、好笑数和评论数:
- 接着打开对应网页源码,就可以直接看到字段信息,内容如下,嵌套在各个标签中,后面就是解析这些标签提取数据:
基于上面网页内容,测试代码如下,非常简单,直接find对应标签,提取文本内容即可:
程序运行截图如下,已经成功抓取到网站数据:
至此,我们就完成了使用python来爬去静态网站。总的来说,整个过程非常简单,也是最基本的爬虫内容,只要你有一定的python基础,熟悉一下上面的示例,很快就能掌握的,当然,你也可以使用urllib,正则表达式匹配等,都行,网上也有相关教程和资料,介绍的非常详细,感兴趣的话,可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言进行补充。
这次分享一个房地产网站数据采集及可视化分析的Python实际案例,应用效果还是有,步骤如下:
1、获取目标网站
2、分析网站,确定数据采集的方法
3、对采集的数据进行处理
4、最后可视化
先看看最终效果:
首先获取目标网站,可以发现获取的数据信息都在网页上面,所以可以直接使用xpath标签定位获取网页上的数据,而不用担心动态网页的数据会出现变化:
然后获取各个采集字段的具体xpath,包括房源信息、房价、地区、建面(面积)等字段的xpa,部分代码如下:
fymc=n.xpath('./div/div[1]/a/text()')[0]#房源名称 fj=n.xpath('./div/div[6]/div/span[1]/text()')[0]#房价 diqu=n.xpath('./div/div[2]/span[1]/text()')[0]#地区 mj=n.xpath('./div/div[3]/span/text()')[0]
然后我们要爬取页数要设置,可以看到页数链接明显出现变化,而且还是规律性的,所以可以构造一个循环采集指定页数的信息(也就是翻页采集),部分代码如下:
for i in range(1,6): url='https://nn.fang.lianjia.com/loupan/pg'+str(i) #print(url)
翻页采集搞定了,接下来就是数据处理,先判断采集的数据有没有空值或者缺失值,就必须使用numpy和pandas这两个模块进行数据处理,部分代码如下:
data=pd.read_csv(r'C:/Users/Administrator/Desktop/链家数据.csv',encoding='gbk') #data.describe()#做描述性分析,判断有没有空值或者缺失值
然后查看采集的数据发现,建面面积这个字段既有中文又有数字和特殊符号,我们要对这个字段进行拆分,拆分为最大面积和最小面积,代码如下:
data['最小面积']=data['面积'].str.split(expand=True)[1].str.split('-',expand=True)[0] data['最大面积']=data['面积'].str.split(expand=True)[1].str.split('-',expand=True)[1].str.split('㎡',expand=True)[0] data=data.drop('面积',axis=1)
处理完采集的数据,接下来就是对数据进行可视化,可视化就用到matplotlib这个模块,我们用了三个图去可视化数据,包括折线图、饼图、条形图,部分代码如下:
#制作可视化图表 plt.figure(figsize=(10,8)) plt.suptitle("南宁房价可视化分析",fontsize=20) plt.subplot(2,2,1) #不同地区的房源数量--饼图 plt.title('不同地区的房源数量占比--饼图') explode=[0,0,0,0,0.2,0] plt.pie(x=data.地区.value_counts(),labels=data.地区.value_counts().index, explode=explode,autopct='%.3f%%') plt.subplot(2,2,2) plt.title('不同地区的房源数量--条形图') plt.ylim(0,20) x=data.地区.value_counts().index y=data.地区.value_counts() plt.bar(x=x,height=y,width=0.5) for a,b in zip(x,y): plt.text(a,b+0.2,str(b),ha='center',va='bottom',fontsize=10.5,color='green') plt.subplot(2,1,2) plt.title('不同地区平均房价——折线图') plt.ylim(0,30000) qingxiu=int(data[data['地区']=="青秀区"].房价.mean()) xixiangtang=int(data[data['地区']=="西乡塘区"].房价.mean()) xingning=int(data[data['地区']=="兴宁区"].房价.mean()) liangqing=int(data[data['地区']=="良庆区"].房价.mean()) yongning=int(data[data['地区']=="邕宁区"].房价.mean()) dq=['青秀区','西乡塘区','兴宁区','良庆区','邕宁区'] mean_fj=[qingxiu,xixiangtang,xingning,liangqing,yongning] #折线图# plt.plot(dq,mean_fj,label='不同地区平均房价') for a,b in zip(dq,mean_fj): plt.text(a,b+0.2,str(b),ha='center',va='top',fontsize=10.5) plt.legend(loc=1,fontsize=13) plt.show()
最后不多说了,附上完整代码:
import requests from lxml import etree import csv import pandas as pd import matplotlib.pyplot as plt from pylab import mpl import time with open('C:/Users/Administrator/Desktop/链家数据.csv','w',encoding='gbk') as f: f.write('房源名称,房价,地区,面积\n') f.close() for i in range(1,6): url='https://nn.fang.lianjia.com/loupan/pg'+str(i) #print(url) headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36' } r=requests.get(url,headers=headers).content b=etree.HTML(r) c=b.xpath('/html/body/div[3]/ul[2]/li') try: for n in c: fymc=n.xpath('./div/div[1]/a/text()')[0]#房源名称 fj=n.xpath('./div/div[6]/div/span[1]/text()')[0]#房价 diqu=n.xpath('./div/div[2]/span[1]/text()')[0]#地区 mj=n.xpath('./div/div[3]/span/text()')[0] with open('C:/Users/Administrator/Desktop/链家数据.csv','a',encoding='gbk') as f1: f1.write('{},{},{},{}\n'.format(fymc,fj,diqu,mj)) print("数据爬取成功!") except: pass time.sleep(20) mpl.rcParams['font.sans-serif']=['SimHei'] mpl.rcParams['axes.unicode_minus']=False data=pd.read_csv(r'C:/Users/Administrator/Desktop/链家数据.csv',encoding='gbk') #数据处理,拆分面积字段为两列数据,最小面积和最大面积 #data.describe() data['最小面积']=data['面积'].str.split(expand=True)[1].str.split('-',expand=True)[0] data['最大面积']=data['面积'].str.split(expand=True)[1].str.split('-',expand=True)[1].str.split('㎡',expand=True)[0] data=data.drop('面积',axis=1) #制作可视化图表 plt.figure(figsize=(10,8)) plt.suptitle("南宁房价可视化分析",fontsize=20) plt.subplot(2,2,1) #不同地区的房源数量--饼图 plt.title('不同地区的房源数量占比--饼图') explode=[0,0,0,0,0.2,0] plt.pie(x=data.地区.value_counts(),labels=data.地区.value_counts().index, explode=explode,autopct='%.3f%%') plt.subplot(2,2,2) plt.title('不同地区的房源数量--条形图') plt.ylim(0,20) x=data.地区.value_counts().index y=data.地区.value_counts() plt.bar(x=x,height=y,width=0.5) for a,b in zip(x,y): plt.text(a,b+0.2,str(b),ha='center',va='bottom',fontsize=10.5,color='green') plt.subplot(2,1,2) plt.title('不同地区平均房价——折线图') plt.ylim(0,30000) qingxiu=int(data[data['地区']=="青秀区"].房价.mean()) xixiangtang=int(data[data['地区']=="西乡塘区"].房价.mean()) xingning=int(data[data['地区']=="兴宁区"].房价.mean()) liangqing=int(data[data['地区']=="良庆区"].房价.mean()) yongning=int(data[data['地区']=="邕宁区"].房价.mean()) dq=['青秀区','西乡塘区','兴宁区','良庆区','邕宁区'] mean_fj=[qingxiu,xixiangtang,xingning,liangqing,yongning] #折线图# plt.plot(dq,mean_fj,label='不同地区平均房价') for a,b in zip(dq,mean_fj): plt.text(a,b+0.2,str(b),ha='center',va='top',fontsize=10.5) plt.legend(loc=1,fontsize=13) plt.show()
到此,以上就是小编对于python 快速搭建网站的问题就介绍到这了,希望介绍关于python 快速搭建网站的3点解答对大家有用。
还没有评论,来说两句吧...