本专栏是以杨秀璋老师爬虫著作《Python网络数据爬取及分析「从入门到精通」》为主线、个人学习理解为主要内容,以学习笔记形式编写的。 本专栏不光是自己的一个学习分享,也希望能给您普及一些关于爬虫的相关知识以及提供一些微不足道的爬虫思路。专栏地址:Python网络数据爬取及分析「从入门到精通」 更多爬虫实例详见专栏:Python爬虫牛刀小试
前文回顾: 「Python爬虫系列讲解」一、网络数据爬取概述 「Python爬虫系列讲解」二、Python知识初学
本文涉及知识点:正则表达式 亦可参考之前写过的一片相关博文:正则表达式心中有,还愁爬虫之路不好走?
目录
1 正则表达式
1.1 re模块
1.2 complie方法
1.3 match方法
1.4 search方法
1.5 group和groups方法
2 Python网络数据爬取的常用模块
2.1 urllib模块
2.1.1 urlopen
2.1.2 urlretrieve
2.2 urlparse模块
2.2.1 urlparse函数
2.2.2 urlunparse函数
2.3 requests模块
2.3.1 导入requests模块
2.3.2 发送GET/POST请求
2.3.3 传递参数
2.3.4 相应内容
2.3.5 定制请求头
3 正则表达式爬取网络数据的常见方法
3.1 爬取标签间的内容
3.1.1 爬取title标签间的内容
3.1.2 爬取超链接标签间的内容
3.1.3 爬取re标签和td标签间的内容
3.2 爬取标签中的参数
3.2.1 爬取超链接标签的URL
3.2.2 爬取图片超链接标签的URL
3.2.3 获取URL中的最后一个参数
3.3 字符串处理及替换
4 爬取实例
5 本文总结
1 正则表达式
正则表达式(Regular Expression, Regex 或 RE) 又称正规表示法或常规表示法,常用来检索、替换那些符合某个模式的文本。 它首先设定好一些特殊的字符及字符组合,然后通过组合的“规则字符串”来对表达式进行过滤,从而获取或匹配用户想要的特定内容。
1.1 re模块
Python 通过 re 模块提供对正则表达式的支持,但在使用正则表达式之前需要导入 re 模块才能调用该模块的功能函数。
import re
其基本步骤是:
将正则表达式的字符串形式编译为 pattern 实例;
使用 pattern 实例处理文本并获得一个匹配实例;
使用 match 实例获得所需信息。
常用函数是 findall,原型如下:
findall(String[, pos[, endpos]])|re.findall(pattern, string[, flags])
该函数表示搜索字符串 string,然后以列表形式返回全部匹配字符串。
其中,参数 re 包括3个常见值(括号内是完整写法):
re.I(re.IGNORECASE) # 使匹配忽略大小写
re.M(re.MULTILINE) # 允许多行匹配
re.S(re.DOTALL) # 匹配包括换行在内的所有字符
另外,pattern 对象是一个编译好的正则表达式,通过 pattern 提供的一系列方法可以对文本进行匹配查找;pattern 对象不能直接实例化,必须使用 re.compile() 进行构造。
1.2 complie方法
re 模块包括一些常用的操作函数,比如 complie() 函数,其原型如下:
compile(pattern[, flags])
该函数根据包含正则表达式的字符串创建模式对象,返回一个 pattern 对象。其中,参数 flags 是匹配模式,可以使用按位或“|”表示同时生效,也可以在正则表达式字符串中指定。
# 举例说明如何使用正则表达式来获取字符串中的数字内容
import re
string = 'A1.45, b5, 6.45, 8.82'
regex = re.compile(r"\d+\.?\d*")
print(regex.findall(string))
1.3 match方法
match 方法是从字符串的 pos 下标处开始匹配 pattern,如果 pattern 结束时已经匹配,则返回一个 match 对象;如果匹配过程中 pattern 无法匹配,或者匹配未结束就已达到 endpos,则返回 None。
match 方法原型如下:
match(string[, pos[, endpos]]) | re.match(patter, string[, flags])
其中,参数 string 表示字符串;pos 表示下标,pos 和 endpos 的默认值分别为 0 和 len(string);参数 flags 用于编译 pattern 时指定匹配模式。
1.4 search方法
search 方法用于查找字符串中可以匹配成功的子字符串。从字符串的 pos 下标处尝试匹配 pattern,如果 pattern 结束时仍可匹配,则返回一个 match 对象,如果 pattern 结束时仍无法匹配,则将 pos 加 1 后重新尝试匹配,若知道 pos = endpos 时仍无法匹配,则返回 None。
search 方法函数原型如下:
search(string[, pos[, endpos]]) | re.search(pattern, string[, flags])
其中,参数 string 表示字符串;pos 表示下标,pos 和 endpos 的默认值分别为 0 和 len(string);参数 flags 用于编译 pattern 时指定匹配模式。
1.5 group和groups方法
group([group1, …]) 方法用于获得一个或多个分组截获的字符串,当它指定多个参数时将以元组形式返回 None,截获多次的组返回最后一次截获的字符串。groups([default]) 方法以元组形式返回全部分组截获的字符串,相当于多次调用 group,其中参数 default 表示没有截获字符串的组以该值代替,默认为 None。
2 Python网络数据爬取的常用模块
2.1 urllib模块
urllib 是 Python 用于获取 URL(Uniform Resource Locators,同意资源定位器)的库函数,可以用于爬取远程的数据并保存,甚至可以设置消息头(header)、代理、超时认证等。
urllib 模块提供的上策接口使用户能够像读取本地文件一样读取 WWW 或 FTP 上的数据,使用起来比C++、C#等编程语言更加方便。
2.1.1 urlopen
函数原型如下
urlopen(url, data = None, proxies = None)
该方法用于创建一个远程 URL 的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据。其中参数 url 表示远程数据的路径,一般是网址;参数 data 表示以 post 方式提交到 url 的数据;参数 proxies 用于设置代理;返回值是一个类文件对象。
urlopen的常用方法
方法
用途
read()、readlines()、close()
这些方法的使用方式与文件对象完全一样,包括文件的读取和关闭操作
info()
返回一个 httplib.HTTPMessage 对象,表示远程服务器返回的头信息
geturl()
返回请求的 URL
getcode()
返回 HTTP 状态码。如果是 HTTP 请求,则 200 表示请求成功完成,404 小时网址未找到
# 本实例用来介绍 urllib 库函数爬取百度官网的实例
import urllib.request
import webbrowser as web
url = 'http://www.baidu.com'
content = urllib.request.urlopen(url) # 打开链接
print(content.info) # 头信息
print(content.geturl) # 请求url
print(content.getcode) # HTTP状态码
# 保存至本地并通过浏览器打开
response = urllib.request.urlopen(url).read()
open('baidu.html', 'w').write(response.decode('UTF-8'))
web.open_new_tab('baidu.html')
2.1.2 urlretrieve
urlretrieve 方法是将远程数据下载到本地,函数原型如下:
urlretrieve(url, filename = None, reporthook = None, data = None)
其中,参数 filename 指定了保存到本地的路径,如果省略该函数,则 urllib 会自动生成一个临时文件来保存数据; 参数 reporthook 是一个回调参数,当连接上服务器,响应的数据块传输完毕时,会触发该调回函数,通常使用该回调函数来显示当前的下载进度; 参数 data 是指传递到服务器的数据。
# 本实例用来演示如何将新浪首页爬取到本地,并保存在“F:/sina.html”文件中,同时显示下载进度
from urllib.request import urlretrieve
# 设置函数来表示下载文件至本地,并显示下载进度
def Download(a, b, c):
# a--已经下载的数据块
# b--数据块的大小
# c--远程文件的大小
per = 100.0 * a * b / c
if per >100:
per = 100
print('%.2f%%' % per)
url = 'http://www.sina.com.cn'
local = 'F:/sina.html'
urlretrieve(url, local, Download)
2.2 urlparse模块
urlparse 模块主要是对 url 进行分析,其主要的操作时拆分和合并 url 各个部件。它可以将 url 拆分成 6 个部分,并返回元组,也可以把拆分后的部分再组成一个 url。
urlparse 模块包括的函数主要有 urlparse、urlunparse 等。
导入方式
# python3版本中已经将urllib2、urlparse、和robotparser并入了urllib模块中,并且修改urllib模块
from urllib.parse import urlunparse
from urllib.parse import urlparse
2.2.1 urlparse函数
函数原型如下:
urlparse(urlstring[, scheme[, allow_fragments]])
该函数将 urlstring 值解析成 6 各部分,从 urlstring 中获取 URL,并返回元组(scheme,netloc,path、params、query、fragment)。该函数可用于确定网络协议(HTTP、FTP等)、服务器地址、文件路径等。
from urllib.parse import urlparse
url = urlparse('https://blog.csdn.net/IT_charge/article/details/105714745')
# 输出内容包括以下六个部分scheme, netloc, path, params, query, fragment
print(url)
print(url.netloc)
2.2.2 urlunparse函数
同样可以调用 urlunparse() 函数将一个元祖内容构建成一条 url,函数原型如下:
urlunparse(parts)
该元组类似 urlparse 函数,它接收元组(scheme, netloc, path, params, query, fragment)后,会重新组成一个具有正确格式的URL,以便共 Python 的其他 HTML 解析模块使用。
from urllib.parse import urlunparse
from urllib.parse import urlparse
url = urlparse('https://blog.csdn.net/IT_charge/article/details/105714745')
# 输出内容包括以下六个部分scheme, netloc, path, params, query, fragment
print(url)
print(url.netloc)
# 重组url
u = urlunparse(url)
print(u)
2.3 requests模块
requests 模块是用 Python 语言编写的、基于 urllib 的第三方库,其采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,既可以节约大量的工作,又完全满足 HTTP 的测试需求。
安装 requests 模块方法
pip install requests
2.3.1 导入requests模块
使用语句如下:
import requests
2.3.2 发送GET/POST请求
requests 模块可以发送 HTTP 的两种请求,GET 请求和 POST 请求。其中 GET 请求可以采用 url 参数传递数据,它从服务器上获取数据,而 POST 请求是向服务器传递数据,该方法更为安全。
# 这里给出 get 和 post 请求获取某个网站网页的方法,得到一个命名为 response 的响应对象,通过这个对象获取我们所需要的信息
r = requests.get('https://github.com/timeline.json)
r = requests.post('https://httpbin.org/post)
2.3.3 传递参数
url 通常会传递某种数据,这种数据采用键值对的参数形式置于 URL 中。
requests通过 params 关键字设置 URL 的参数,以一个字符串字典来提供这些参数。
# 传递 key1=value1 和 key2=value2 到 httpbin.org/get 后
import requests
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get('http://httpbin.org/get', params = payload)
print(r.url)
2.3.4 相应内容
requests 会自动解码来自服务器的内容,并且大多数 Unicode 字符集都能被无缝解码。当请求发出后,requests 会基于 HTTP 头部对响应的编码做出有根据的推测。
import requests
r = requests.get('https://github.com/timeline.json')
print(r.text)
2.3.5 定制请求头
只需要简单地传递一个字典(dict)给消息头 headers 参数即可。以网站“堆糖”为例,其 headers 参数在 User-Agent 里找。
定制请求头是为了伪装爬虫程序,不会被网站轻易检测出来,亦即不会返回 403 错误。
# 这里假设给 堆糖 网站指定一个消息头
import requests
base_url = 'https://www.duitang.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}
response = requests.get(url=base_url, headers=headers)
print(response)
3 正则表达式爬取网络数据的常见方法
3.1 爬取标签间的内容
HTML语言是采用标签对的形式来编写网站的,包括起始标签和结束标签,比如
、
、等
3.1.1 爬取title标签间的内容
首先可以采用正则表达式“‘
(.*?) ’”来爬取起始标签
和结束标签 之间的内容。
# 本实例用来爬取百度官网标题——“百度一下,你就知道”
import re
import requests
url = 'https://www.baidu.com/?tn=78040160_5_pg&ch=8'
response = requests.get(url).content.decode('utf-8')
title = re.findall(r'(.*?) ', response)
print(title[0])
3.1.2 爬取超链接标签间的内容
在 HTML 中, 超链接标题 用于表示超链接。
import re
import requests
url = "http://www.baidu.com"
content = requests.get(url).content.decode('utf-8')
# 获取完整的超链接
res1 = re.compile('')
urls1 = re.findall(res1, content)
for u1 in urls1:
print(u1)
# 获取超链接 和 之间的内容
res2 = re.compile('(.*?)')
urls2 = re.findall(res2, content)
for u2 in urls2:
print(u2)
3.1.3 爬取re标签和td标签间的内容
网页常用的布局包括 table 布局和 div 布局,其中,table 布局中常见的标签包括tr,th和td,tr(table row)表示表格行为,td(table data)表示表格数据,th(table heading)表示表格表头。
首先假设存在一HTML代码
表格
编号 课程名
001 Python程序设计语言
002 JavaScript
003 网络数据爬取及分析
import re
# 获取 之间的内容
f = open("t.html","r",encoding="utf-8") # 读取文件
f = f.read() # 把文件内容转化为字符串
trs = re.findall(r'(.*?) ', f, re.S|re.M)
for tr in trs:
print(tr)
# 获取 之间的内容
print('\n')
for m in trs:
ths = re.findall(r'(.*?) ', m, re.S|re.M)
for th in ths:
print(th)
# 获取 之间的内容
print('\n')
tds = re.findall(r'(.*?) (.*?) ', f, re.S|re.M)
for td in tds:
print(td[0], td[1])
3.2 爬取标签中的参数
3.2.1 爬取超链接标签的URL
HTML超链接的基本格式为 “ 链接内容 ”
import re
content = '''
新闻
hao123
地图
'''
res = r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')"
urls = re.findall(res, content, re.I|re.S|re.M)
for url in urls:
print(url)
3.2.2 爬取图片超链接标签的URL
在HTML中,我们可以看到各式各样的图片,其中图片标签的基本格式为“ ”,只有通过爬取这些图片原地址,才能下载对应的图片至本地。
import re
content = '''
'''
res = ' '
urls = re.findall(res, content, re.I|re.S|re.M)
print(urls)
3.2.3 获取URL中的最后一个参数
在使用 Python 爬取图片的过程中,通常会遇到图片对应的 URL 最后一个字段用来对图片命名的情况,如前面的“gancaoduo-002.jpg”,因此就需要通过解析 URL “/” 后面的参数来获取图片名字。
import re
content = '''
'''
# res = ' '
# urls = re.findall(res, content, re.I|re.S|re.M)
# print(urls)
urls = 'http://img.ivsky.com/img/tupian/pre/202001/15/gancaoduo-002.jpg'
# 采用“/”分隔字符串,进而获取最后一个值
picture_name = urls.split('/')[-1]
print(picture_name)
3.3 字符串处理及替换
当使用正则表达式爬取网页文本时,首先需要调用 find() 函数来找到指定的位置,然后在进行进一步爬取。
# 比如先获取class属性为“infobox”的表格table,然后再进行定位爬取
start = content.find(r'import re
content = '''
000 软件工程
001 Python程序设计语言
002 JavaScript
003 网络数据 爬取及分析
'''
res = r'(.*?) (.*?) '
texts = re.findall(res, content, re.S|re.M)
for text in texts:
print(text[0], text[1])
此时需要过滤掉多余的字符串,如换行( )、空格( )、加粗( ),过滤代码如下:
import re
content = '''
000 软件工程
001 Python程序设计语言
002 JavaScript
003 网络数据 爬取及分析
'''
res = r'(.*?) (.*?) '
texts = re.findall(res, content, re.S|re.M)
for text in texts:
value0 = text[0].replace(' ', "").replace(' ', "")
value1 = text[1].replace(' ', "").replace(' ', "")
if '' in value1:
text_value = re.findall(r'(.*?) ', value1, re.S|re.M)
print(value0, text_value[0])
else:
print(value0, value1)
采用 replace() 函数将字符串 “ ” 和 “< >” 转换成空白实现过滤,而加粗( )则需要使用正则表达式进行过滤
4 爬取实例
正则表达式爬取实例请参考我的另一篇博文:https://blog.csdn.net/IT_charge/article/details/105977578
该文提供了两个爬取实例
下载全书网长篇连载小说《斗罗大陆》
目标是爬取b站中的视频弹幕并生成词云
5 本文总结
正则表达式通过组合的“规则字符串”对表达式进行过滤,从复杂内容中匹配想要的信息。它的主要对象是文本,适合文本字符串等内容,比如匹配URL、E-mail这种纯文本的字符,但不是和匹配文本意义。各种编程语言都能使用正则表达式,比如C#、Java、Python等。
正则表达式爬虫常用于获取字符串中的某些内容,比如提取博客阅读量和评论数等数字,截取URL中的某个参数,过滤掉特定的字符或检查所获取的数据是否符合某个逻辑,验证URL或日期类型等。由于其具有灵活性、逻辑性和功能性较强的特点,从而能够迅速地以极简单地方式从复杂字符串中匹配到想要的信息。
最后再补充一点,在Python网络数据爬取中,与 re 模块(正则表达式)有同样功能的还有 xpath、BeautifulSoup等。
欢迎留言,一起学习交流~
感谢阅读
END
你可能感兴趣的:(python,正则表达式,python爬虫,网络数据爬取及分析)
机器学习与深度学习间关系与区别
ℒℴѵℯ心·动ꦿ໊ོ꫞
人工智能 学习 深度学习 python
一、机器学习概述定义机器学习(MachineLearning,ML)是一种通过数据驱动的方法,利用统计学和计算算法来训练模型,使计算机能够从数据中学习并自动进行预测或决策。机器学习通过分析大量数据样本,识别其中的模式和规律,从而对新的数据进行判断。其核心在于通过训练过程,让模型不断优化和提升其预测准确性。主要类型1.监督学习(SupervisedLearning)监督学习是指在训练数据集中包含输入
地推话术,如何应对地推过程中家长的拒绝
校师学
相信校长们在做地推的时候经常遇到这种情况:市场专员反馈家长不接单,咨询师反馈难以邀约这些家长上门,校区地推疲软,招生难。为什么?仅从地推层面分析,一方面因为家长受到的信息轰炸越来越多,对信息越来越“免疫”;而另一方面地推人员的专业能力和营销话术没有提高,无法应对家长的拒绝,对有意向的家长也不知如何跟进,眼睁睁看着家长走远;对于家长的疑问,更不知道如何有技巧地回答,机会白白流失。由于回答没技巧和专业
理解Gunicorn:Python WSGI服务器的基石
范范0825
ipython linux 运维
理解Gunicorn:PythonWSGI服务器的基石介绍Gunicorn,全称GreenUnicorn,是一个为PythonWSGI(WebServerGatewayInterface)应用设计的高效、轻量级HTTP服务器。作为PythonWeb应用部署的常用工具,Gunicorn以其高性能和易用性著称。本文将介绍Gunicorn的基本概念、安装和配置,帮助初学者快速上手。1.什么是Gunico
学点心理知识,呵护孩子健康
静候花开_7090
昨天听了华中师范大学教育管理学系副教授张玲老师的《哪里才是学生心理健康的最后庇护所,超越教育与技术的思考》的讲座。今天又重新学习了一遍,收获匪浅。张玲博士也注意到了当今社会上的孩子由于心理问题导致的自残、自杀及伤害他人等恶性事件。她向我们普及了一个重要的命题,她说心理健康的一些基本命题,我们与我们通常的一些教育命题是不同的,她还举了几个例子,让我们明白我们原来以为的健康并非心理学上的健康。比如如果
扫地机类清洁产品之直流无刷电机控制
悟空胆好小
清洁服务机器人 单片机 人工智能
扫地机类清洁产品之直流无刷电机控制1.1前言扫地机产品有很多的电机控制,滚刷电机1个,边刷电机1-2个,清水泵电机,风机一个,部分中高端产品支持抹布功能,也就是存在抹布盘电机,还有追觅科沃斯石头等边刷抬升电机,滚刷抬升电机等的,这些电机有直流有刷电机,直接无刷电机,步进电机,电磁阀,挪动泵等不同类型。电机的原理,驱动控制方式也不行。接下来一段时间的几个文章会作个专题分析分享。直流有刷电机会自动持续
店群合一模式下的社区团购新发展——结合链动 2+1 模式、AI 智能名片与 S2B2C 商城小程序源码
说私域
人工智能 小程序
摘要:本文探讨了店群合一的社区团购平台在当今商业环境中的重要性和优势。通过分析店群合一模式如何将互联网社群与线下终端紧密结合,阐述了链动2+1模式、AI智能名片和S2B2C商城小程序源码在这一模式中的应用价值。这些创新元素的结合为社区团购带来了新的机遇,提升了用户信任感、拓展了营销渠道,并实现了线上线下的完美融合。一、引言随着互联网技术的不断发展,社区团购作为一种新兴的商业模式,在满足消费者日常需
我校举行新老教师师徒结对仪式暨名师专业工作室工作交流活动
李蕾1229
为促进我校教师专业发展,发挥骨干教师的引领带头作用,11月6日下午,我校举行新老教师师徒结对仪式暨名师专业工作室工作交流活动。图片发自App会议由教师发展处李蕾主任主持,首先,由范校长宣读新老教师结对名单及双方承担职责。随后,两位新调入教师陈玉萍、莫正杰分别和他们的师傅鲍元美、刘召彬老师签订了师徒结对协议书。图片发自App图片发自App师徒拥抱、握手。有了师傅就有了目标有了方向,相信两位新教师在师
向内而求
陈陈_19b4
10月27日,阴。阅读书目:《次第花开》。作者:希阿荣博堪布,是当今藏传佛家宁玛派最伟大的上师法王,如意宝晋美彭措仁波切颇具影响力的弟子之一。多年以来,赴海内外各地弘扬佛法,以正式授课、现场开示、发表文章等多种方法指导佛学弟子修行佛法。代表作《寂静之道》、《生命这出戏》、《透过佛法看世界》自出版以来一直是佛教类书籍中的畅销书。图片发自App金句:1.佛陀说,一切痛苦的根源在于我们长期以来对自身及外
抖音乐买买怎么加入赚钱?赚钱方法是什么
测评君高省
你会在抖音买东西吗?如果会,那么一定要免费注册一个乐买买,抖音直播间,橱窗,小视频里的小黄车买东西都可以返佣金!省下来都是自己的,分享还可以赚钱乐买买是好省旗下的抖音返佣平台,乐买买分析社交电商的价值,乐买买属于今年难得的副业项目风口机会,2019年错过做好省的搞钱的黄金时期,那么2022年千万别再错过乐买买至于我为何转到高省呢?当然是高省APP佣金更高,模式更好,终端用户不流失。【高省】是一个自
Python数据分析与可视化实战指南
William数据分析
python python 数据
在数据驱动的时代,Python因其简洁的语法、强大的库生态系统以及活跃的社区,成为了数据分析与可视化的首选语言。本文将通过一个详细的案例,带领大家学习如何使用Python进行数据分析,并通过可视化来直观呈现分析结果。一、环境准备1.1安装必要库在开始数据分析和可视化之前,我们需要安装一些常用的库。主要包括pandas、numpy、matplotlib和seaborn等。这些库分别用于数据处理、数学
python os.environ
江湖偌大
python 深度学习
os.environ['TF_CPP_MIN_LOG_LEVEL']='0'#默认值,输出所有信息os.environ['TF_CPP_MIN_LOG_LEVEL']='1'#屏蔽通知信息(INFO)os.environ['TF_CPP_MIN_LOG_LEVEL']='2'#屏蔽通知信息和警告信息(INFO\WARNING)os.environ['TF_CPP_MIN_LOG_LEVEL']='
Python中os.environ基本介绍及使用方法
鹤冲天Pro
# Python python 服务器 开发语言
文章目录python中os.environos.environ简介os.environ进行环境变量的增删改查python中os.environ的使用详解1.简介2.key字段详解2.1常见key字段3.os.environ.get()用法4.环境变量的增删改查和判断是否存在4.1新增环境变量4.2更新环境变量4.3获取环境变量4.4删除环境变量4.5判断环境变量是否存在python中os.envi
Pyecharts数据可视化大屏:打造沉浸式数据分析体验
我的运维人生
信息可视化 数据分析 数据挖掘 运维开发 技术共享
Pyecharts数据可视化大屏:打造沉浸式数据分析体验在当今这个数据驱动的时代,如何将海量数据以直观、生动的方式展现出来,成为了数据分析师和企业决策者关注的焦点。Pyecharts,作为一款基于Python的开源数据可视化库,凭借其丰富的图表类型、灵活的配置选项以及高度的定制化能力,成为了构建数据可视化大屏的理想选择。本文将深入探讨如何利用Pyecharts打造数据可视化大屏,并通过实际代码案例
Python教程:一文了解使用Python处理XPath
旦莫
Python进阶 python 开发语言
目录1.环境准备1.1安装lxml1.2验证安装2.XPath基础2.1什么是XPath?2.2XPath语法2.3示例XML文档3.使用lxml解析XML3.1解析XML文档3.2查看解析结果4.XPath查询4.1基本路径查询4.2使用属性查询4.3查询多个节点5.XPath的高级用法5.1使用逻辑运算符5.2使用函数6.实战案例6.1从网页抓取数据6.1.1安装Requests库6.1.2代
python os.environ_python os.environ 读取和设置环境变量
weixin_39605414
python os.environ
>>>importos>>>os.environ.keys()['LC_NUMERIC','GOPATH','GOROOT','GOBIN','LESSOPEN','SSH_CLIENT','LOGNAME','USER','HOME','LC_PAPER','PATH','DISPLAY','LANG','TERM','SHELL','J2REDIR','LC_MONETARY','QT_QPA
基于社交网络算法优化的二维最大熵图像分割
智能算法研学社(Jack旭)
智能优化算法应用 图像分割 算法 php 开发语言
智能优化算法应用:基于社交网络优化的二维最大熵图像阈值分割-附代码文章目录智能优化算法应用:基于社交网络优化的二维最大熵图像阈值分割-附代码1.前言2.二维最大熵阈值分割原理3.基于社交网络优化的多阈值分割4.算法结果:5.参考文献:6.Matlab代码摘要:本文介绍基于最大熵的图像分割,并且应用社交网络算法进行阈值寻优。1.前言阅读此文章前,请阅读《图像分割:直方图区域划分及信息统计介绍》htt
509. 斐波那契数(每日一题)
lzyprime
lzyprime博客(github)创建时间:2021.01.04qq及邮箱:2383518170leetcode笔记题目描述斐波那契数,通常用F(n)表示,形成的序列称为斐波那契数列。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)=0,F(1)=1F(n)=F(n-1)+F(n-2),其中n>1给你n,请计算F(n)。示例1:输入:2输出:1解释:F(2)=F(1)+
18-115 一切思考不能有效转化为行动,都TM是扯淡!
成长时间线
7月25号写了一篇关于为什么会断更如此严重的反思,然而,之后日更仅仅维持了一周,又出现了这次更严重的现象。从8月2号到昨天8月6号,5天!又是5天没有更文!虽然这次断更时间和上次一样,那为什么说这次更严重?因为上次之后就分析了问题的原因,以及应该如何解决,按理说应该会好转,然而,没过几天严重断更的现象再次出现,想想,经过反思,问题依然没有解决与改变,这让我有些担忧。到底是哪里出了问题,难道我就真的
2023-04-17|篮球女孩
长一木
1小学抑或初中阶段,在课外书了解到她的故事。“篮球女孩”。当时佩服她的顽强,也对生命多了一丝敬畏。今天刚好在公众号看到,长大后的“篮球女孩”。佩服之余又满是心疼。网络侵删祝那素未蒙面的女孩,未来一切顺遂。
高端密码学院笔记285
柚子_b4b4
高端幸福密码学院(高级班)幸福使者:李华第(598)期《幸福》之回归内在深层生命原动力基础篇——揭秘“激励”成长的喜悦心理案例分析主讲:刘莉一,知识扩充:成功=艰苦劳动+正确方法+少说空话。贪图省力的船夫,目标永远下游。智者的梦再美,也不如愚人实干的脚印。幸福早课堂2020.10.16星期五一笔记:1,重视和珍惜的前提是知道它的价值非常重要,当你珍惜了,你就真正定下来,真正的学到身上。2,大家需要
使用Faiss进行高效相似度搜索
llzwxh888
faiss python
在现代AI应用中,快速和高效的相似度搜索是至关重要的。Faiss(FacebookAISimilaritySearch)是一个专门用于快速相似度搜索和聚类的库,特别适用于高维向量。本文将介绍如何使用Faiss来进行相似度搜索,并结合Python代码演示其基本用法。什么是Faiss?Faiss是一个由FacebookAIResearch团队开发的开源库,主要用于高维向量的相似性搜索和聚类。Faiss
python是什么意思中文-在python中%是什么意思
编程大乐趣
Python中%有两种:1、数值运算:%代表取模,返回除法的余数。如:>>>7%212、%操作符(字符串格式化,stringformatting),说明如下:%[(name)][flags][width].[precision]typecode(name)为命名flags可以有+,-,''或0。+表示右对齐。-表示左对齐。''为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0表示使用0填
在一台Ubuntu计算机上构建Hyperledger Fabric网络
落叶无声9
区块链 超级账本 Hyperledger fabric 区块链 ubuntu 构建 hyperledger fabric
在一台Ubuntu计算机上构建HyperledgerFabric网络Hyperledgerfabric是一个开源的区块链应用程序平台,为开发基于区块链的应用程序提供了一个起点。当我们提到HyperledgerFabric网络时,我们指的是使用HyperledgerFabric的正在运行的系统。即使只使用最少数量的组件,部署Fabric网络也不是一件容易的事。Fabric社区创建了一个名为Cello
春季养肝正当时
dxn悟
重温快乐2023年2月4日立春。春天来了,春暖花开,小鸟欢唱,那在这样的季节我们如何养肝呢?自然界的春季对应中医五行的木,人体五脏肝属木,“木曰曲直”,是以树干曲曲直直地向上、向外伸长舒展的生发姿态,来形容具有生长、升发、条达、舒畅等特征的食物及现象。根据中医天人相应的理念,肝五行属木,喜条达,主疏泄,与春天相应,所以春天最适合养肝。养肝首先要少生气,因为肝喜条达恶抑郁。人体五志肝为怒,生气发怒最
Day1笔记-Python简介&标识符和关键字&输入输出
~在杰难逃~
Python python 开发语言 大数据 数据分析 数据挖掘
大家好,从今天开始呢,杰哥开展一个新的专栏,当然,数据分析部分也会不定时更新的,这个新的专栏主要是讲解一些Python的基础语法和知识,帮助0基础的小伙伴入门和学习Python,感兴趣的小伙伴可以开始认真学习啦!一、Python简介【了解】1.计算机工作原理编程语言就是用来定义计算机程序的形式语言。我们通过编程语言来编写程序代码,再通过语言处理程序执行向计算机发送指令,让计算机完成对应的工作,编程
python八股文面试题分享及解析(1)
Shawn________
python
#1.'''a=1b=2不用中间变量交换a和b'''#1.a=1b=2a,b=b,aprint(a)print(b)结果:21#2.ll=[]foriinrange(3):ll.append({'num':i})print(11)结果:#[{'num':0},{'num':1},{'num':2}]#3.kk=[]a={'num':0}foriinrange(3):#0,12#可变类型,不仅仅改变
MYSQL面试系列-04
king01299
面试 mysql 面试
MYSQL面试系列-0417.关于redolog和binlog的刷盘机制、redolog、undolog作用、GTID是做什么的?innodb_flush_log_at_trx_commit及sync_binlog参数意义双117.1innodb_flush_log_at_trx_commit该变量定义了InnoDB在每次事务提交时,如何处理未刷入(flush)的重做日志信息(redolog)。它
每日算法&面试题,大厂特训二十八天——第二十天(树)
肥学
⚡算法题⚡面试题每日精进 java 算法 数据结构
目录标题导读算法特训二十八天面试题点击直接资料领取导读肥友们为了更好的去帮助新同学适应算法和面试题,最近我们开始进行专项突击一步一步来。上一期我们完成了动态规划二十一天现在我们进行下一项对各类算法进行二十八天的一个小总结。还在等什么快来一起肥学进行二十八天挑战吧!!特别介绍小白练手专栏,适合刚入手的新人欢迎订阅编程小白进阶python有趣练手项目里面包括了像《机器人尬聊》《恶搞程序》这样的有趣文章
Python快速入门 —— 第三节:类与对象
孤华暗香
Python快速入门 python 开发语言
第三节:类与对象目标:了解面向对象编程的基础概念,并学会如何定义类和创建对象。内容:类与对象:定义类:class关键字。类的构造函数:__init__()。类的属性和方法。对象的创建与使用。示例:classStudent:def__init__(self,name,age,major):self.name
pyecharts——绘制柱形图折线图
2224070247
信息可视化 python java 数据可视化
一、pyecharts概述自2013年6月百度EFE(ExcellentFrontEnd)数据可视化团队研发的ECharts1.0发布到GitHub网站以来,ECharts一直备受业界权威的关注并获得广泛好评,成为目前成熟且流行的数据可视化图表工具,被应用到诸多数据可视化的开发领域。Python作为数据分析领域最受欢迎的语言,也加入ECharts的使用行列,并研发出方便Python开发者使用的数据
jquery实现的jsonp掉java后台
知了ing
java jsonp jquery
什么是JSONP?
先说说JSONP是怎么产生的:
其实网上关于JSONP的讲解有很多,但却千篇一律,而且云里雾里,对于很多刚接触的人来讲理解起来有些困难,小可不才,试着用自己的方式来阐释一下这个问题,看看是否有帮助。
1、一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一律不准;
2、
Struts2学习笔记
caoyong
struts2
SSH : Spring + Struts2 + Hibernate
三层架构(表示层,业务逻辑层,数据访问层) MVC模式 (Model View Controller)
分层原则:单向依赖,接口耦合
1、Struts2 = Struts + Webwork
2、搭建struts2开发环境
a>、到www.apac
SpringMVC学习之后台往前台传值方法
满城风雨近重阳
springMVC
springMVC控制器往前台传值的方法有以下几种:
1.ModelAndView
通过往ModelAndView中存放viewName:目标地址和attribute参数来实现传参:
ModelAndView mv=new ModelAndView();
mv.setViewName="success
WebService存在的必要性?
一炮送你回车库
webservice
做Java的经常在选择Webservice框架上徘徊很久,Axis Xfire Axis2 CXF ,他们只有一个功能,发布HTTP服务然后用XML做数据传输。
是的,他们就做了两个功能,发布一个http服务让客户端或者浏览器连接,接收xml参数并发送xml结果。
当在不同的平台间传输数据时,就需要一个都能解析的数据格式。
但是为什么要使用xml呢?不能使json或者其他通用数据
js年份下拉框
3213213333332132
java web ee
<div id="divValue">test...</div>测试
//年份
<select id="year"></select>
<script type="text/javascript">
window.onload =
简单链式调用的实现技术
归来朝歌
方法调用 链式反应 编程思想
在编程中,我们可以经常遇到这样一种场景:一个实例不断调用它自身的方法,像一条链条一样进行调用
这样的调用你可能在Ajax中,在页面中添加标签:
$("<p>").append($("<span>").text(list[i].name)).appendTo("#result");
也可能在HQ
JAVA调用.net 发布的webservice 接口
darkranger
webservice
/**
* @Title: callInvoke
* @Description: TODO(调用接口公共方法)
* @param @param url 地址
* @param @param method 方法
* @param @param pama 参数
* @param @return
* @param @throws BusinessException
Javascript模糊查找 | 第一章 循环不能不重视。
aijuans
Way
最近受我的朋友委托用js+HTML做一个像手册一样的程序,里面要有可展开的大纲,模糊查找等功能。我这个人说实在的懒,本来是不愿意的,但想起了父亲以前教我要给朋友搞好关系,再加上这也可以巩固自己的js技术,于是就开始开发这个程序,没想到却出了点小问题,我做的查找只能绝对查找。具体的js代码如下:
function search(){
var arr=new Array("my
狼和羊,该怎么抉择
atongyeye
工作
狼和羊,该怎么抉择
在做一个链家的小项目,只有我和另外一个同事两个人负责,各负责一部分接口,我的接口写完,并全部测联调试通过。所以工作就剩下一下细枝末节的,工作就轻松很多。每天会帮另一个同事测试一些功能点,协助他完成一些业务型不强的工作。
今天早上到公司没多久,领导就在QQ上给我发信息,让我多协助同事测试,让我积极主动些,有点责任心等等,我听了这话,心里面立马凉半截,首先一个领导轻易说
读取android系统的联系人拨号
百合不是茶
android sqlite数据库 内容提供者 系统服务的使用
联系人的姓名和号码是保存在不同的表中,不要一下子把号码查询来,我开始就是把姓名和电话同时查询出来的,导致系统非常的慢
关键代码:
1, 使用javabean操作存储读取到的数据
package com.example.bean;
/**
*
* @author Admini
ORACLE自定义异常
bijian1013
数据库 自定义异常
实例:
CREATE OR REPLACE PROCEDURE test_Exception
(
ParameterA IN varchar2,
ParameterB IN varchar2,
ErrorCode OUT varchar2 --返回值,错误编码
)
AS
/*以下是一些变量的定义*/
V1 NUMBER;
V2 nvarc
查看端号使用情况
征客丶
windows
一、查看端口
在windows命令行窗口下执行:
>netstat -aon|findstr "8080"
显示结果:
TCP 127.0.0.1:80 0.0.0.0:0 &
【Spark二十】运行Spark Streaming的NetworkWordCount实例
bit1129
wordcount
Spark Streaming简介
NetworkWordCount代码
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
Struts2 与 SpringMVC的比较
BlueSkator
struts2 spring mvc
1. 机制:spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同。 2. 性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring
Hibernate在更新时,是可以不用session的update方法的(转帖)
BreakingBad
Hibernate update
地址:http://blog.csdn.net/plpblue/article/details/9304459
public void synDevNameWithItil()
{Session session = null;Transaction tr = null;try{session = HibernateUtil.getSession();tr = session.beginTran
读《研磨设计模式》-代码笔记-观察者模式
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
import java.util.Observer;
/**
* “观
重置MySQL密码
chenhbc
mysql 重置密码 忘记密码
如果你也像我这么健忘,把MySQL的密码搞忘记了,经过下面几个步骤就可以重置了(以Windows为例,Linux/Unix类似):
1、关闭MySQL服务
2、打开CMD,进入MySQL安装目录的bin目录下,以跳过权限检查的方式启动MySQL
mysqld --skip-grant-tables
3、新开一个CMD窗口,进入MySQL
mysql -uroot
 
再谈系统论,控制论和信息论
comsci
设计模式 生物 能源 企业应用 领域模型
再谈系统论,控制论和信息论
偶然看
oracle moving window size与 AWR retention period关系
daizj
oracle
转自: http://tomszrp.itpub.net/post/11835/494147
晚上在做11gR1的一个awrrpt报告时,顺便想调整一下AWR snapshot的保留时间,结果遇到了ORA-13541这样的错误.下面是这个问题的发生和解决过程.
SQL> select * from v$version;
BANNER
-------------------
Python版B树
dieslrae
python
话说以前的树都用java写的,最近发现python有点生疏了,于是用python写了个B树实现,B树在索引领域用得还是蛮多了,如果没记错mysql的默认索引好像就是B树...
首先是数据实体对象,很简单,只存放key,value
class Entity(object):
'''数据实体'''
def __init__(self,key,value)
C语言冒泡排序
dcj3sjt126com
算法
代码示例:
# include <stdio.h>
//冒泡排序
void sort(int * a, int len)
{
int i, j, t;
for (i=0; i<len-1; i++)
{
for (j=0; j<len-1-i; j++)
{
if (a[j] > a[j+1]) // >表示升序
自定义导航栏样式
dcj3sjt126com
自定义
-(void)setupAppAppearance
{
[[UILabel appearance] setFont:[UIFont fontWithName:@"FZLTHK—GBK1-0" size:20]];
[UIButton appearance].titleLabel.font =[UIFont fontWithName:@"FZLTH
11.性能优化-优化-JVM参数总结
frank1234
jvm参数 性能优化
1.堆
-Xms --初始堆大小
-Xmx --最大堆大小
-Xmn --新生代大小
-Xss --线程栈大小
-XX:PermSize --永久代初始大小
-XX:MaxPermSize --永久代最大值
-XX:SurvivorRatio --新生代和suvivor比例,默认为8
-XX:TargetSurvivorRatio --survivor可使用
nginx日志分割 for linux
HarborChung
nginx linux 脚本
nginx日志分割 for linux 默认情况下,nginx是不分割访问日志的,久而久之,网站的日志文件将会越来越大,占用空间不说,如果有问题要查看网站的日志的话,庞大的文件也将很难打开,于是便有了下面的脚本 使用方法,先将以下脚本保存为 cutlog.sh,放在/root 目录下,然后给予此脚本执行的权限
复制代码代码如下:
chmo
Spring4新特性——泛型限定式依赖注入
jinnianshilongnian
spring spring4 泛型式依赖注入
Spring4新特性——泛型限定式依赖注入
Spring4新特性——核心容器的其他改进
Spring4新特性——Web开发的增强
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
Spring4新特性——Groovy Bean定义DSL
Spring4新特性——更好的Java泛型操作API
Spring4新
centOS安装GCC和G++
liuxihope
centos gcc
Centos支持yum安装,安装软件一般格式为yum install .......,注意安装时要先成为root用户。
按照这个思路,我想安装过程如下:
安装gcc:yum install gcc
安装g++: yum install g++
实际操作过程发现,只能有gcc安装成功,而g++安装失败,提示g++ command not found。上网查了一下,正确安装应该
第13章 Ajax进阶(上)
onestopweb
Ajax
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
How to determine BusinessObjects service pack and fix pack
blueoxygen
BO
http://bukhantsov.org/2011/08/how-to-determine-businessobjects-service-pack-and-fix-pack/
The table below is helpful. Reference
BOE XI 3.x
12.0.0.
y BOE XI 3.0 12.0.
x.
y BO
Oracle里的自增字段设置
tomcat_oracle
oracle
大家都知道吧,这很坑,尤其是用惯了mysql里的自增字段设置,结果oracle里面没有的。oh,no 我用的是12c版本的,它有一个新特性,可以这样设置自增序列,在创建表是,把id设置为自增序列
create table t
(
id number generated by default as identity (start with 1 increment b
Spring Security(01)——初体验
yang_winnie
spring Security
Spring Security(01)——初体验
博客分类: spring Security
Spring Security入门安全认证
首先我们为Spring Security专门建立一个Spring的配置文件,该文件就专门用来作为Spring Security的配置