0引言
学爬虫,拿平常看小说的绿色网站下手。
爬取的数据主要分为两部分,收藏榜的小说信息和小说详情页的部分数据。
1url解析
1.1收藏榜url
通过点击榜单上侧选项(其实也可以用拼音猜一猜),观察url变化,寻找规律。如fw指代范围,fbsj指代发表时间,ycx指代原创性,以此类推。可以通过改变其后的数字,来改变榜单范围。而最重要的翻页就通过改变page=后的页码。
我没什么要先定的范围,就只更改page。
2.1小说详情页url
随意点击任意小说详情页,可以看到主要区别就在于最后novelid的一串数字,看起来没有什么规律的数字。
但是通过后面的页面分析,可以看到小说详情页的url其实就包含在html中,只要记录下之后再转接即可。
2页面元素解析
2.1收藏榜
鼠标右键查看审查元素,观察。
可以看到,整个收藏榜信息均在一个table之内,一行是一个tr,每格是一个td。
木苏里
全球高考
原创-纯爱-近代现代-剧情
轻松
完结
589514
35908325376
2018-10-10 20:03:00
以第一部作品为例,按顺序,可以爬取到作者(木苏里)、作品详情页链接(oneauthor.php?authorid=966799)、简介+标签(简介:并肩炸考场 标签:强强 无限流 相爱相杀 未来架空)、作品(全球高考)、类型(原创-纯爱-近代现代-剧情)、风格(轻松)、进度(完结)、字数(589514)、作品积分(35908325376)、发表时间(2018/10/10 20:03:00)。
整个表格都比较有规律,先findall tr,再根据html写出对应的正则compile。
2.2小说详情页
详情页主要准备爬取三个地方:文案、文章基本信息、章节表格结尾数据
1)文案
2)作品视角、是否出版、签约状态
3)总书评数、当前被收藏数、营养液数
同样是查看审查元素,写出正则表达式,但在这里遇到了不少问题:
1)审查元素与源代码有差别
部分数据,如非v章节章均点击数,审查元素有,但是源代码里是空白:
这是个动态元素,后来找到了解决办法,但是要再次跳转页码过于麻烦,所以决定放弃这个数据。
2)区域html差别大
爬取的三个地方,不像收藏榜是在一个table里,很难findall先锁定一个大区域,尝试之后,东拼西凑,文案和书评收藏数用compile,文章基本信息里,先findall了ul。
3)是否出版扒不下来
原本想把title里的文字给扒下来,但是无论如何compile都是空白,最后草率地写了个if else简单判断,手动append上是否出版的信息。
3cookie
晋江不登录的话,只让爬取前十页的数据,十页以后会有登录提示,爬虫也自动断了,上网找到了解决方法,登录晋江账号后,查看审查元素,并刷新页面,找到如下所示:
将cookie复制,加到爬虫的请求头中。
4代码
import requests
from bs4 import BeautifulSoup
import time
import re
import xlwt
t1 = time.time()
def main(savepath):
count=0
for page in range(1,501):
url = get_url(page)
headers = {
'cookie': '你的cookie'}
html = requests.get(url, headers=headers)
html.encoding = html.apparent_encoding
try:
datalist = getData(html.content)
except:
print("爬取失败:", page)
continue
if len(datalist) == 0:
break
saveData(savepath,datalist,count)
count+=len(datalist)
print(page)
print(count)
#time.sleep(3)
def get_url(page):
url = f"https://www.jjwxc.net/bookbase.php?fw0=0&fbsj0=0&ycx0=0&xx0=0&mainview0=0&sd0=0&lx0=0&fg0=0&bq=-1&sortType=4&isfinish=0&collectiontypes=ors&page={page}"
return url
#提取收藏榜数据的正则表达式
findAuthor = re.compile(r'">(.*?)',re.U)
findName = re.compile(r'">(.*?)',re.U)
findBookLink = re.compile(r'", re.I|re.S|re.M)
findType = re.compile(r' (.*?) ', re.S|re.M)
findStyle = re.compile(r'(.*?) ', re.S|re.M)
findPro = re.compile(r'(.*?) ', re.S|re.M)
findSize = re.compile(r'(\d+) ')
findPoint = re.compile(r'(\d+) ')
findTime = re.compile(r'(.*?) ')
def getData(document):
datalist = []
soup = BeautifulSoup(document, "html.parser")
i = 0
for item in soup.findAll('tr'):
data = [] # 保存一本书的所有信息
item = str(item)
Author = re.findall(findAuthor, item)# 提取作者名
Name = re.findall(findName, item)# 提取文名
BookLink = re.findall(findBookLink, item)# 提取文章链接
Title = re.findall(findTitle, item)# 提取标签
Type = re.findall(findType, item)# 提取类型
Style = re.findall(findStyle, item)# 提取风格
Pro = re.findall(findPro, item)# 提取进度
Size = re.findall(findSize, item)# 提取字数
Point = re.findall(findPoint, item)# 提取积分
Time = re.findall(findTime, item)# 提取发表时间
if i:
data.append(Author[0])
data.append(Name[1])
BookLink[1]='http://www.jjwxc.net/' + BookLink[1]
data.append(BookLink[1])
Title[1]=re.findall(r'title="(.*?)"', Title[1], re.S|re.M)
data.append(Title[1])
data.append(Type[0].strip())
data.append(Style[1].strip())
if '' in Pro[2]:
Pro[2]=re.findall(r'>(.*?)', Pro[2])
data.append(Pro[2])
else:
data.append(Pro[2].strip())
data.append(int(Size[0]))
data.append(int(Point[1]))
data.append(Time[0])
#进入小说详情页,爬取相关数据
try:
detail(BookLink[1],data)
except:
print("爬取失败:", BookLink[1])
continue
datalist.append(data)
i = 1
return datalist
def getURL(url):
headers = {
'User-Agent': 'Mozilla/5.0 (MSIE 10.0; Windows NT 6.1; Trident/5.0)'
}
response = requests.get(url,headers = headers)
response.encoding = 'gbk'
time.sleep(0.2)
if response.status_code == 200:
return response.text
return None
def detail(url,data):
html = getURL(url)
soup = BeautifulSoup(html, "html.parser")
#爬取书评、收藏、营养液数
comment = re.compile('.*?.*?.*?
(.*?).*?(.*?).*?(.*?).*?(.*?).*?',re.S)
items = re.findall(comment,html)
for j in items:
data.append(j[1])#书评数
data.append(j[2])#当前被收藏数
data.append(j[3])#营养液数
#爬取文案
copywriting = re.compile('.*?(.*?)
',re.S)
items = re.findall(copywriting,html)
#value = items[0].replace(' ', '').replace(' ', '')
pattern = re.compile(r'<[^>]+>',re.S)
value = pattern.sub('', items[0])
data.append(value)
# 爬取作品视角、出版、签约状态
result_list = soup.find_all('ul',attrs={'name':'printright'})
for results in result_list:
result=str(results)
infor = re.compile('(.*?)',re.S|re.M)
items = re.findall(infor,result)
data.append(items[2].strip())#作品视角
if 'img' in items[7]:#是否出版
data.append("已出版")
else:
data.append("尚未出版")
items[9]=re.findall(r'>(.*?)', items[9])#是否签约
data.append(items[9][0])
workbook = xlwt.Workbook(encoding='utf-8',style_compression=0)
worksheet = workbook.add_sheet('晋江', cell_overwrite_ok=True)
col = ("作者","作品","链接","标签","类型","风格","进度","字数","作品积分","发表时间","总书评数","当前被收藏数","营养液数","文案","视角","出版状态","签约状态")
for i in range(0,17):
worksheet.write(0,i,col[i])
# 3.保存数据
# 保存到文件中
def saveData(savepath,datalist,count):
for i in range(0,len(datalist)):
data = datalist[i]
for j in range(0,len(data)):
worksheet.write(count+i+1,j,data[j])
workbook.save(savepath)
if __name__ == "__main__":
main("你的存储路径")
print("耗时:", time.time() - t1)
5结果
500页每页100本小说,最后爬取出来46953条数据。
6总结
回忆性文章,其实过程中遇到过很多问题和困难,但暂时只想起这些了。
待改善的地方:
1)爬取太慢,爬取250页花费近10个小时,看网上有多进程、多线程可以加快爬虫时间,之后有时间当学习改进;
2)正则表达式不够精确,部分详情页爬取出来不是目的数据,因为错误的数据量不多,后续数据处理采取了直接删除的办法,之后可以在爬虫阶段尝试改进;
3)部分收藏榜页整页爬取失败,部分详情页爬取失败,失败原因待查。
你可能感兴趣的:(python,爬虫,数据分析,beautifulsoup)
【python】实用的文件操作-多个excel文件的两种合并方式
匡虐
文件操作 python
【python】实用的文件操作-excel文件两种合并方式工作中常遇到多个excel文件表的结构一样,只是内容不同,现需要将其合并在一起。有两种方式,一种是合并成一张表,将其他表中的数据追加到同一张表中。另外一种是存放成一个文件多张表,不同的文件放到一个excel文件的不同工作簿中。1、合成一张表importpandasaspdimportospath=r'C:\Users\lenovo\Docu
python-mysql-连接池
Xiaohuansong
python笔记 python mysql 连接池
利用内部队列编写的简易的支持上下文的连接池,目前只支持多线程内的链接代码如下实现了最大最小连接池的限制,链接回收,dml封装,动态维护链接等操作importMySQLdbimportloggingimportQueuefromthreadingimportThreadfromcontextlibimportcontextmanagerimporttimeclassMysqlTool(object)
BUUCTF_Crypto_[WUSTCTF2020]B@se
qq_58370970
经验分享
给了一个txt文件:从题目可以看出是与base64相关,不难发现是base64的变种,将base64的顺序改变了,但还有4个字符不知道可以写python脚本得到缺失的4个字符代码如下:importstrings='JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs****kxyz012789+/'j='ABCDEFGHIJKLMNOPQRSTUVWXY
Python mysql数据库连接池
戴**
Python
最近在写一个Python的文本分析,需要大量的读取数据库(千万级别mysql)并进行更新操作,运行着程序发现一个问题,过了一会儿程序就报错说链接已经满了,或者是端口不可重复使用,因此我在网上找到了一个连接池的代码用于解决这个问题,在此处贴出代码本身是有配置文件的,因为我觉得在我的项目中不必要所以就删除了#!/usr/bin/envpython#-*-coding:utf-8-*-importpym
Python的Selenium库中的模块、类和异常的汇总
qq_24654817
python selenium 开发语言
1.`selenium.common.exceptions`:包含了Selenium中可能出现的异常。2.`selenium.webdriver.chrome.options`:用于配置Chrome浏览器的选项。3.`selenium.webdriver.chrome.service`:用于管理Chrome浏览器的后台服务。4.`selenium.webdriver.chrome.webdrive
代码编写java代做c++程序代编程Python代c#设计C语言接单软件定制
matlabgoodboy
java c++ c#
您提到的服务涵盖了多种编程语言和软件开发需求,包括Java代码编写、C++程序代编、Python编程代做、C#设计、C语言编程,以及软件定制服务。这些服务在软件开发领域非常常见,且有着广泛的应用。以下是对这些服务更详细的解释和接单时的一些建议:服务详解Java代码编写Java以其跨平台性、面向对象和丰富的API而著称,广泛应用于企业级应用、Android应用开发、Web服务端开发等领域。您可以提供
10个方法:用Python执行SQL、Excel常见任务_python util
前端收割机
程序员 python sql excel
使用Python的最大优点之一是能够从网络的巨大范围中获取数据的能力,而不是只能访问手动下载的文件。在Python的requests库可以帮助你分类不同的网站,并从它们获取数据,而BeautifulSoup库可以帮助你处理和过滤数据,那么你精确得到你所需要的。如果你要去这条路线,请小心使用权问题。(不用担心,如果你想跳过这个部分,可以的!原始的csv文件在这里,你可以随意下载,如果你宁愿开始这个练
基于Python爬虫的豆瓣电影影评数据可视化分析
wp_tao
Python副业接单实战项目 python 爬虫 信息可视化
文章目录前言一、数据抓取二、数据可视化1.绘制词云图2.读入数据总结前言本文以电影《你好,李焕英》在豆瓣上的影评数据为爬取和分析的目标,利用python爬虫技术对影评数据进行了爬取,使用pandas库进行了数据清洗,使用jieba库进行分词,使用collections库进行词频统计,使用wordcloud库绘制词云图,使用matplotlib库绘制了评论人所在城市占比饼状图,并使用matplotl
BP神经网络及其Python和MATLAB实现预测
陈辰学长
神经网络 python matlab
BP神经网络及其Python和MATLAB实现预测引言BP神经网络(BackPropagationNeuralNetwork),即反向传播神经网络,是一种通过反向传播算法进行监督学习的多层前馈网络。这种网络能够通过不断地调整和改变神经元的连接权重,达到对特定任务的学习和优化。由于其高度的灵活性和适应性,BP神经网络在模式识别、函数逼近、优化问题等多个领域有着广泛的应用。本文将详细介绍BP神经网络的
C# 解析 HTML 实战指南
code_shenbing
C# c# html 开发语言
在网页开发和数据处理的场景中,经常需要从HTML文档里提取有用的信息。C#作为一门强大的编程语言,提供了丰富的工具和库来实现HTML的解析。这篇博客就带你深入了解如何使用C#高效地解析HTML。一、为什么要在C#中解析HTML在实际项目中,无论是进行网页数据采集、网页内容分析,还是开发网页爬虫,都离不开对HTML的解析。例如,电商平台可能需要从竞品网站上采集商品价格和库存信息;新闻聚合应用可能需要
【Python】selenium结合js模拟鼠标点击、拦截弹窗、鼠标悬停方法汇总(使用 execute_script 执行点击的方法)
翠花上酸菜
selenium 网络爬虫 python selenium javascript
我们在写selenium获取网络信息的时候,有时候我们会受到对方浏览器的监控,对方通过分析用户行为模式,如点击、滚动、停留时间等,网站可以识别出异常行为,进而对Selenium爬虫进行限制。这里我们可以加入JavaScript的使用。Selenium可以执行JavaScript,通过使用execute_script方法,来执行点击操作。它可以绕过一些Selenium直接操作元素时可能遇到的问题,比
Conda与Bash的完美融合:激活你的开发环境
2401_85760095
conda bash 开发语言
Conda与Bash的完美融合:激活你的开发环境在Python开发者的日常工作中,Conda不仅作为包管理器,更是一个强大的环境管理工具。为了在bashshell中使用Conda创建的环境,需要进行初始化操作。condainitbash命令正是为此设计的,它可以修改bash的配置文件,使得Conda的环境能够在每次启动bashshell时自动激活。本文将详细介绍如何使用condainitbash命
2024年最全selenium UI使用小技巧集合_python selenium 中
2401_84692253
程序员 selenium ui python
al=driver.switch_to.alertal.send_keys(“口罩太贵了”)al.accept()#确认对话框time.sleep(3)driver.quit()###鼠标事件用selenium做自动化,有时候会遇到需要模拟鼠标操作才能进行的情况,比如单击、双击、点击鼠标右键、拖拽等等。而selenium给我们提供了一个类来处理这类事件——ActionChainsActionCha
webUI自动化之基本框架搭建(python + selenium + unittest)_python ui自动框架
2401_84140628
2024年程序员学习 自动化 python selenium
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课
【2025年】全国CTF夺旗赛-从零基础入门到竞赛,看这一篇就稳了!
白帽黑客鹏哥
linux 网络安全 web安全 密码学 CTF夺旗赛
基于入门网络安全/黑客打造的:黑客&网络安全入门&进阶学习资源包目录一、CTF简介二、CTF竞赛模式三、CTF各大题型简介四、CTF学习路线4.1、初期1、html+css+js(2-3天)2、apache+php(4-5天)3、mysql(2-3天)4、python(2-3天)5、burpsuite(1-2天)4.2、中期1、SQL注入(7-8天)2、文件上传(7-8天)3、其他漏洞(14-15
Python: Python 多版本管理
mikes zhang
python python 大数据 pip
PythonLauncherPythonLauncher是PythonforWindows才有的功能.(注一)PythonLauncher的出现,让我们可以不必依赖环境变数PATH的设定来简化python执行档的使用,同时也简化了多个版本的python同时存在时的管理工作.(试想如果你的系统里安装3或4个python时,你到底要如何指定使用其中一个版本?)PythonLauncherpy.exe是
【Python】类(class)
shanks66
python 开发语言
@[toc]【Python】类(class)【Python】类(class)在Python中,类(Class)是面向对象编程(OOP)的核心概念。类用于创建对象,对象是类的实例。类可以包含属性(变量)和方法(函数),用于描述对象的行为和状态。Python类的基本结构和用法:1.基本语法class类名:#类属性(所有实例共享)类属性=值#构造方法(初始化对象)def__init__(self,参数1
深度解析:Python与TensorFlow在日平均气温预测中的应用——LSTM神经网络实战
AI_DL_CODE
python 神经网络 tensorflow LSTM 气温预测 RNN
文章目录1.引言1.1研究背景与意义1.2研究目标与问题定义2.概念解析2.1Python语言简介2.2TensorFlow框架概述2.3LSTM神经网络原理3.原理详解3.1时间序列分析基础3.1.1时间序列的组成3.1.2时间序列分析方法3.2LSTM在时间序列分析中的应用3.2.1LSTM的优势3.2.2LSTM的结构3.3日平均气温预测的数学模型3.3.1ARIMA模型3.3.2LSTM模
python多版本管理_python 多版本管理
春梅狐狸
python多版本管理
枫癫:您好!我用的是5.7版本,按照您的配置,错误如下麻烦看到了,还请回复,比较着急,谢谢您了!|@|[root@controllerwy]#snmpwalk-v1-cpublic192.168.1.100.1.3.6.1.4.1.2021.5000|@|UCD-SNMP-MIB::ucdavis.5000.1.0=INTEGER:1|@|UCD-SNMP-MIB::ucdavis.5000.2.
【python | pip list】pip list导入与导出
苹榆枫
# 深度学习框架 pip python linux
1.导出#查看当前安装的包piplist#导出当前安装的包记录pipfreeze>./requirements.txt2.导入#用anaconda创建一个虚拟环境condacreate-npy37python=3.7#激活当前py37环境MAC/Linux:sourceactivatepy37WIndows:activatepy37#导入安装之前的包列表pipinstall-r./requirem
【AI | python】functools.partial 的作用
苹榆枫
# 深度学习框架 人工智能 python
在代码中,partial是Pythonfunctools模块中的一个方法,用于固定函数的某些参数并返回一个新的函数。这个新的函数可以像原函数一样调用,但固定的参数不需要再次提供。代码中:self.compute_cis=partial(compute_axial_cis,dim=self.internal_dim//self.num_heads,theta=rope_theta)这里partial
下完安装好python后,想查看python的安装位置的几种方法
omofun5541
python 开发语言
查看python的路径基于windows系统,按下win+r(也就是命令提示符),输入cmd,进入查看当前的python的版本的话输入python-V1,查看当前下载的python类型和路径则可以输入py-0(加*的是你使用python的默认版本)2,还可以使用命令wherepython查看路径(这样就不会显示你python默认使用的是哪个)小技巧:如果想清除命令行的话可以输入命令cls然后ent
Python3 环境搭建指南
lly202406
开发语言
Python3环境搭建指南1.引言Python是一种广泛使用的高级编程语言,以其简洁明了的语法和强大的功能而闻名。Python3是Python的最新版本,它在Python2的基础上进行了大量更新和改进。本指南将详细介绍如何在您的计算机上搭建Python3环境,以便您可以开始编写和运行Python程序。2.系统要求在开始安装Python3之前,请确保您的计算机满足以下最低系统要求:操作系统:Wind
【python自动化运维】python第三方运维模块应用
leo__programmer
python自动化运维 运维 python 自动化
一、pymysql模块——数据库编程1、介绍第三方模块作用:连接MySQL数据库1.1、操作流程创建数据库连接基于连接创建游标cursor数据库读写操作关闭游标关闭数据库连接2、pymysql模块的使用2.1、准备工作准备MySQL数据库安装pymysql模块pipinstallpymysql安装配置MySQL数据库[root@localhost~]#yuminstall-ymariadb-ser
一文学习python中编码和解码
科雷learning
python编程 python 开发语言
学习目录1什么是编码和解码2编解码基本原理3python的默认编码4什么是10进制/2进制/8进制/16进制?5python的字符串编解码5.1使用str.encode()编码,str.decode()解码5.2解码的乱码问题5.316进制字符串转为普通字符串6python字符串和unicode类型编码转换什么是编码和解码大家都知道计算机是二进制的世界,计算机系统只能识别数字0和1组成的一串串的数
Python timedelta 时间间隔
人生重启
Python python
Pythontimedelta对象用于表示时间间隔,可以通过以下方式初始化:指定天、小时、分钟、秒和毫秒:fromdatetimeimporttimedeltatimedelta(days=2,hours=6,minutes=30,seconds=15,milliseconds=500)从总秒数指定:timedelta(seconds=3600)#1hour从日期差指定:end_date=date
postgrel执行VACUUM报VACUUM cannot run inside a transaction block
dianzufa9403
数据库 golang java
在python脚本里执行:1sql_gp1="VACUUMdwd_access_record_inout_temp"2sql_gp2="deletefromdwd_access_record_inout_temptwheret.indate>(selectnow()::timestamp-interval'36hour')"3conn=gputil.connect(logger,target_ho
2024年华为OD机试真题- 英文输入法-(C++/Java/python)-OD统一考试(C卷D卷)
dijkstra2023
华为od c++ python java
题目描述主管期望你来实现英文输入法单词联想功能,需求如下:依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词。按字典序输出联想到的单词序列,如果联想不到,请输出用户输入的单词前缀。注意英文单词联想时区分大小写缩略形式如"don’t"判定为两个单词"don"和“t”输出的单词序列不能有重复单词,且只能是英文单词,不能有标点符号输入描述输入两行首行输入一段由英文单词word和标点构成的
Python datetime timedelta
Claroja
Python
https://docs.python.org/3/library/datetime.html#timedelta-objectsclassdatetime.timedelta(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0,hours=0,weeks=0)timedelta对象基本介绍classdatetime.timedelta
【Python】Python-JOSE:Python 中的 JSON Web Token 处理库
@Unity打怪升级
Python python json 人工智能 前端 开发语言 开源 机器学习
Python-JOSE是一个用于处理JSONWebToken(JWT)和JOSE(JSONObjectSigningandEncryption)标准的Python库。它支持对JWT进行签名、加密、解密和验证等操作,是处理基于OAuth2.0和OpenIDConnect协议的身份验证和授权任务的理想选择。Python-JOSE实现了JOSE规范中定义的JWS(JSONWebSignature)、JW
java责任链模式
3213213333332132
java 责任链模式 村民告县长
责任链模式,通常就是一个请求从最低级开始往上层层的请求,当在某一层满足条件时,请求将被处理,当请求到最高层仍未满足时,则请求不会被处理。
就是一个请求在这个链条的责任范围内,会被相应的处理,如果超出链条的责任范围外,请求不会被相应的处理。
下面代码模拟这样的效果:
创建一个政府抽象类,方便所有的具体政府部门继承它。
package 责任链模式;
/**
*
linux、mysql、nginx、tomcat 性能参数优化
ronin47
一、linux 系统内核参数
/etc/sysctl.conf文件常用参数 net.core.netdev_max_backlog = 32768 #允许送到队列的数据包的最大数目
net.core.rmem_max = 8388608 #SOCKET读缓存区大小
net.core.wmem_max = 8388608 #SOCKET写缓存区大
php命令行界面
dcj3sjt126com
PHP cli
常用选项
php -v
php -i PHP安装的有关信息
php -h 访问帮助文件
php -m 列出编译到当前PHP安装的所有模块
执行一段代码
php -r 'echo "hello, world!";'
php -r 'echo "Hello, World!\n";'
php -r '$ts = filemtime("
Filter&Session
171815164
session
Filter
HttpServletRequest requ = (HttpServletRequest) req;
HttpSession session = requ.getSession();
if (session.getAttribute("admin") == null) {
PrintWriter out = res.ge
连接池与Spring,Hibernate结合
g21121
Hibernate
前几篇关于Java连接池的介绍都是基于Java应用的,而我们常用的场景是与Spring和ORM框架结合,下面就利用实例学习一下这方面的配置。
1.下载相关内容: &nb
[简单]mybatis判断数字类型
53873039oycg
mybatis
昨天同事反馈mybatis保存不了int类型的属性,一直报错,错误信息如下:
Caused by: java.lang.NumberFormatException: For input string: "null"
at sun.mis
项目启动时或者启动后ava.lang.OutOfMemoryError: PermGen space
程序员是怎么炼成的
eclipse jvm tomcat catalina.sh eclipse.ini
在启动比较大的项目时,因为存在大量的jsp页面,所以在编译的时候会生成很多的.class文件,.class文件是都会被加载到jvm的方法区中,如果要加载的class文件很多,就会出现方法区溢出异常 java.lang.OutOfMemoryError: PermGen space.
解决办法是点击eclipse里的tomcat,在
我的crm小结
aijuans
crm
各种原因吧,crm今天才完了。主要是接触了几个新技术:
Struts2、poi、ibatis这几个都是以前的项目中用过的。
Jsf、tapestry是这次新接触的,都是界面层的框架,用起来也不难。思路和struts不太一样,传说比较简单方便。不过个人感觉还是struts用着顺手啊,当然springmvc也很顺手,不知道是因为习惯还是什么。jsf和tapestry应用的时候需要知道他们的标签、主
spring里配置使用hibernate的二级缓存几步
antonyup_2006
java spring Hibernate xml cache
.在spring的配置文件中 applicationContent.xml,hibernate部分加入
xml 代码
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hi
JAVA基础面试题
百合不是茶
抽象实现接口 String类 接口继承 抽象类继承实体类 自定义异常
/* * 栈(stack):主要保存基本类型(或者叫内置类型)(char、byte、short、 *int、long、 float、double、boolean)和对象的引用,数据可以共享,速度仅次于 * 寄存器(register),快于堆。堆(heap):用于存储对象。 */ &
让sqlmap文件 "继承" 起来
bijian1013
java ibatis sqlmap
多个项目中使用ibatis , 和数据库表对应的 sqlmap文件(增删改查等基本语句),dao, pojo 都是由工具自动生成的, 现在将这些自动生成的文件放在一个单独的工程中,其它项目工程中通过jar包来引用 ,并通过"继承"为基础的sqlmap文件,dao,pojo 添加新的方法来满足项
精通Oracle10编程SQL(13)开发触发器
bijian1013
oracle 数据库 plsql
/*
*开发触发器
*/
--得到日期是周几
select to_char(sysdate+4,'DY','nls_date_language=AMERICAN') from dual;
select to_char(sysdate,'DY','nls_date_language=AMERICAN') from dual;
--建立BEFORE语句触发器
CREATE O
【EhCache三】EhCache查询
bit1129
ehcache
本文介绍EhCache查询缓存中数据,EhCache提供了类似Hibernate的查询API,可以按照给定的条件进行查询。
要对EhCache进行查询,需要在ehcache.xml中设定要查询的属性
数据准备
@Before
public void setUp() {
//加载EhCache配置文件
Inpu
CXF框架入门实例
白糖_
spring Web 框架 webservice servlet
CXF是apache旗下的开源框架,由Celtix + XFire这两门经典的框架合成,是一套非常流行的web service框架。
它提供了JAX-WS的全面支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用,同时它能与spring进行完美结合。
在apache cxf官网提供
angular.equals
boyitech
AngularJS AngularJS API AnguarJS 中文API angular.equals
angular.equals
描述:
比较两个值或者两个对象是不是 相等。还支持值的类型,正则表达式和数组的比较。 两个值或对象被认为是 相等的前提条件是以下的情况至少能满足一项:
两个值或者对象能通过=== (恒等) 的比较
两个值或者对象是同样类型,并且他们的属性都能通过angular
java-腾讯暑期实习生-输入一个数组A[1,2,...n],求输入B,使得数组B中的第i个数字B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]
bylijinnan
java
这道题的具体思路请参看 何海涛的微博:http://weibo.com/zhedahht
import java.math.BigInteger;
import java.util.Arrays;
public class CreateBFromATencent {
/**
* 题目:输入一个数组A[1,2,...n],求输入B,使得数组B中的第i个数字B[i]=A
FastDFS 的安装和配置 修订版
Chen.H
linux fastDFS 分布式文件系统
FastDFS Home:http://code.google.com/p/fastdfs/
1. 安装
http://code.google.com/p/fastdfs/wiki/Setup http://hi.baidu.com/leolance/blog/item/3c273327978ae55f93580703.html
安装libevent (对libevent的版本要求为1.4.
[强人工智能]拓扑扫描与自适应构造器
comsci
人工智能
当我们面对一个有限拓扑网络的时候,在对已知的拓扑结构进行分析之后,发现在连通点之后,还存在若干个子网络,且这些网络的结构是未知的,数据库中并未存在这些网络的拓扑结构数据....这个时候,我们该怎么办呢?
那么,现在我们必须设计新的模块和代码包来处理上面的问题
oracle merge into的用法
daizj
oracle sql merget into
Oracle中merge into的使用
http://blog.csdn.net/yuzhic/article/details/1896878
http://blog.csdn.net/macle2010/article/details/5980965
该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. ORACLE 9i 中,使用此命令必须同时指定UPDATE 和INSE
不适合使用Hadoop的场景
datamachine
hadoop
转自:http://dev.yesky.com/296/35381296.shtml。
Hadoop通常被认定是能够帮助你解决所有问题的唯一方案。 当人们提到“大数据”或是“数据分析”等相关问题的时候,会听到脱口而出的回答:Hadoop! 实际上Hadoop被设计和建造出来,是用来解决一系列特定问题的。对某些问题来说,Hadoop至多算是一个不好的选择,对另一些问题来说,选择Ha
YII findAll的用法
dcj3sjt126com
yii
看文档比较糊涂,其实挺简单的:
$predictions=Prediction::model()->findAll("uid=:uid",array(":uid"=>10));
第一个参数是选择条件:”uid=10″。其中:uid是一个占位符,在后面的array(“:uid”=>10)对齐进行了赋值;
更完善的查询需要
vim 常用 NERDTree 快捷键
dcj3sjt126com
vim
下面给大家整理了一些vim NERDTree的常用快捷键了,这里几乎包括了所有的快捷键了,希望文章对各位会带来帮助。
切换工作台和目录
ctrl + w + h 光标 focus 左侧树形目录ctrl + w + l 光标 focus 右侧文件显示窗口ctrl + w + w 光标自动在左右侧窗口切换ctrl + w + r 移动当前窗口的布局位置
o 在已有窗口中打开文件、目录或书签,并跳
Java把目录下的文件打印出来
蕃薯耀
列出目录下的文件 文件夹下面的文件 目录下的文件
Java把目录下的文件打印出来
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年7月11日 11:02:
linux远程桌面----VNCServer与rdesktop
hanqunfeng
Desktop
windows远程桌面到linux,需要在linux上安装vncserver,并开启vnc服务,同时需要在windows下使用vnc-viewer访问Linux。vncserver同时支持linux远程桌面到linux。
linux远程桌面到windows,需要在linux上安装rdesktop,同时开启windows的远程桌面访问。
下面分别介绍,以windo
guava中的join和split功能
jackyrong
java
guava库中,包含了很好的join和split的功能,例子如下:
1) 将LIST转换为使用字符串连接的字符串
List<String> names = Lists.newArrayList("John", "Jane", "Adam", "Tom");
Web开发技术十年发展历程
lampcy
android Web 浏览器 html5
回顾web开发技术这十年发展历程:
Ajax
03年的时候我上六年级,那时候网吧刚在小县城的角落萌生。传奇,大话西游第一代网游一时风靡。我抱着试一试的心态给了网吧老板两块钱想申请个号玩玩,然后接下来的一个小时我一直在,注,册,账,号。
彼时网吧用的512k的带宽,注册的时候,填了一堆信息,提交,页面跳转,嘣,”您填写的信息有误,请重填”。然后跳转回注册页面,以此循环。我现在时常想,如果当时a
架构师之mima-----------------mina的非NIO控制IOBuffer(说得比较好)
nannan408
buffer
1.前言。
如题。
2.代码。
IoService
IoService是一个接口,有两种实现:IoAcceptor和IoConnector;其中IoAcceptor是针对Server端的实现,IoConnector是针对Client端的实现;IoService的职责包括:
1、监听器管理
2、IoHandler
3、IoSession
ORA-00054:resource busy and acquire with NOWAIT specified
Everyday都不同
oracle session Lock
[Oracle]
今天对一个数据量很大的表进行操作时,出现如题所示的异常。此时表明数据库的事务处于“忙”的状态,而且被lock了,所以必须先关闭占用的session。
step1,查看被lock的session:
select t2.username, t2.sid, t2.serial#, t2.logon_time
from v$locked_obj
javascript学习笔记
tntxia
JavaScript
javascript里面有6种基本类型的值:number、string、boolean、object、function和undefined。number:就是数字值,包括整数、小数、NaN、正负无穷。string:字符串类型、单双引号引起来的内容。boolean:true、false object:表示所有的javascript对象,不用多说function:我们熟悉的方法,也就是
Java enum的用法详解
xieke90
enum 枚举
Java中枚举实现的分析:
示例:
public static enum SEVERITY{
INFO,WARN,ERROR
}
enum很像特殊的class,实际上enum声明定义的类型就是一个类。 而这些类都是类库中Enum类的子类 (java.l