先来看看页面长啥样的:https://book.douban.com/top250
我们将要爬取哪些信息:书名、链接、评分、一句话评价……
1. 爬取单个信息
我们先来尝试爬取书名,利用之前的套路,还是先复制书名的xpath:
得到第一本书《追风筝的人》的书名xpath如下:
//*[@id="content"]/div/div[1]/div/table[1]/tbody/tr/td[2]/div[1]/a
得到xpath,我们就可以按照之前的方法来尝试一下:
返回的竟然是空值,这就很尴尬了。
这里需要注意,浏览器复制的 xpath 信息并不是完全可靠的,浏览器经常会自己在里面增加多余的 tbody 标签,我们需要手动把这些标签删掉。
修改 xpath 后再来尝试,结果如下:
切记:浏览器复制 xpath 不是完全可靠,看到 tbody 标签特别要注意。
分别复制《追风筝的人》、《小王子》、《围城》、《解忧杂货店》的 xpath 信息进行对比:
//*[@id="content"]/div/div[1]/div/table[1]/tbody/tr/td[2]/div[1]/a
//*[@id="content"]/div/div[1]/div/table[2]/tbody/tr/td[2]/div[1]/a
//*[@id="content"]/div/div[1]/div/table[3]/tbody/tr/td[2]/div[1]/a
//*[@id="content"]/div/div[1]/div/table[4]/tbody/tr/td[2]/div[1]/a
比较可以发现书名的 xpath 信息仅仅 table 后的序号不一样,并且跟书的序号一致,于是去掉序号(去掉 tbody),我们可以得到通用的 xpath 信息:
//*[@id=“content”]/div/div[1]/div/table/tr/td[2]/div[1]/a
好了,我们试试把这一页全部书名爬下来:
2.爬取多个信息
分别复制《追风筝的人》、《小王子》、《围城》、《解忧杂货店》评分的 xpath 信息进行对比:
//*[@id="content"]/div/div[1]/div/table[1]/tbody/tr/td[2]/div[2]/span[2]
//*[@id="content"]/div/div[1]/div/table[2]/tbody/tr/td[2]/div[2]/span[2]
//*[@id="content"]/div/div[1]/div/table[3]/tbody/tr/td[2]/div[2]/span[2]
//*[@id="content"]/div/div[1]/div/table[4]/tbody/tr/td[2]/div[2]/span[2]
相信你已经可以秒写出爬取全部评分的xpath了:
//*[@id=“content”]/div/div[1]/div/table/tr/td[2]/div[2]/span[2]
把评分的xpath放入之前的代码,运行:
现在我们再把书名和评分同时爬取下来:
这里我们默认书名和评分爬到的都是完全的、正确的信息,这种默认一般情况没问题,但其实是有缺陷的,如果我们某一项少爬或多爬了信息,那么两种数据的量就不一样了,从而匹配错误。比如下面的例子:
书名xpath 后的@title 改为 text(),获取的文本数量与评分数量不一致,出现匹配错位。
如果我们以每本书为单位,分别取获取对应的信息,那肯定完全匹配
书名的标签肯定在这本书的框架内,于是我们从书名的标签向上找,发现覆盖整本书的标签(左边网页会有代码包含内容的信息),把xpath 信息复制下来:
//*[@id="content"]/div/div[1]/div/table[1]
我们将整本书和书名的xpath进行对比
//*[@id=“content”]/div/div[1]/div/table[1] #整本书
//*[@id=“content”]/div/div[1]/div/table[1]/tr/td[2]/div[1]/a #书名
//*[@id=“content”]/div/div[1]/div/table[1]/tr/td[2]/div[2]/span[2] #评分
不难发现,书名和评分 xpath 的前半部分和整本书的 xpath 一致的, 那我们可以通过这样写 xpath 的方式来定位信息:
file=s.xpath(“//*[@id=“content”]/div/div[1]/div/table[1]”)
title =div.xpath(“./tr/td[2]/div[1]/a/@title”)
score=div.xpath(“./tr/td[2]/div[2]/span[2]/text()”)
在实际的代码中来看一下:
刚刚我们爬了一本书的信息,那如何爬这个页面所有书呢?很简单啊,把 xpath 中
后面定位的序号去掉就ok。
终于看到庐山真面目了,不过,等等~
title = div.xpath("./tr/td[2]/div[1]/a/@title")[0]
score=div.xpath("./tr/td[2]/div[2]/span[2]/text()")[0]
为什么这两行后面多了个 [0] 呢?我们之前爬出来的数据是列表,外面带个方框,看着非常难受,列表只有一个值,对其取第一个值就OK。如果不熟悉列表的知识,可以回去补补。
接下来就是按照这样的方式多爬几个元素啦!
有一个点需要注意的是:
num=div.xpath("./tr/td[2]/div[2]/span[3]/text()")[0].strip("(").strip().strip(")")
这行代码用了几个 strip() 方法,()里面表示要删除的内容,strip(“(”) 表示删除括号, strip() 表示删除空白符。
嗯,已经把一个页面搞定了,接下来需要,把所有页面的信息都爬下来。
3.翻页,爬取所有页面信息
先来看一下翻页后url是如何变化的:
https://book.douban.com/top250?start=0 #第一页
https://book.douban.com/top250?start=25 #第二页
https://book.douban.com/top250?start=50 #第三页
url 变化的规律很简单,只是 start=() 的数字不一样而已,而且是以每页25为单位,递增25,这不正是每页的书籍的数量吗?于是,我们只需要写一个循环就可以了啊。
for a in range(10):
url = 'https://book.douban.com/top250?start={}'.format(a*25)
#总共10个页面,用 a*25 保证以25为单位递增
这里要强调一下 Python range() 函数
基本语法:range(start, stop, step) start:计数从 start 开始。默认是从 0 开始。例如 range(5) 等价于range(0,5); end:计数到 end 结束,但不包括 end。例如:range(0,5)是 [0,1,2,3,4] 没有5 step:步长,默认为1。例如:range(0,5) 等价于 range(0,5,1)
>>>range(10) #从 0 开始到 10 (不包含)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11) #从 1 开始到 11 (不包含)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5) #从0到30(不包含),步长为5
[0, 5, 10, 15, 20, 25]
加上循环之后,完整代码如下:
from lxml import etree
import requests
import time
for a in range(10):
url = 'https://book.douban.com/top250?start={}'.format(a*25)
data = requests.get(url).text
s=etree.HTML(data)
file=s.xpath('//*[@id="content"]/div/div[1]/div/table')
time.sleep(3)
for div in file:
title = div.xpath("./tr/td[2]/div[1]/a/@title")[0]
href = div.xpath("./tr/td[2]/div[1]/a/@href")[0]
score=div.xpath("./tr/td[2]/div[2]/span[2]/text()")[0]
num=div.xpath("./tr/td[2]/div[2]/span[3]/text()")[0].strip("(").strip().strip(")").strip()
scrible=div.xpath("./tr/td[2]/p[2]/span/text()")
if len(scrible) > 0:
print("{},{},{},{},{}\n".format(title,href,score,num,scrible[0]))
else:
print("{},{},{},{}\n".format(title,href,score,num))
来运行一下:
请务必要自己练习几遍,你觉得自己看懂了,还是会出错,不信我们赌五毛钱。
Python 的基础语法很重要,没事的时候多去看看:字符串、列表、字典、元组、条件语句、循环语句……
编程最重要的是实战,比如你已经能够爬TOP250的图书了,去试试TOP250电影呢。
好了,这节课就到这里!
下节预告:Python爬虫入门 | 5 爬虫必备Python知识
完整7节课程目录: Python爬虫入门 | 1 Python环境的安装 Python爬虫入门 | 2 爬取豆瓣电影信息 Python爬虫入门 | 3 爬虫必备Python知识 Python爬虫入门 | 4 爬取豆瓣TOP250图书信息 Python爬虫入门 | 5 爬取小猪短租租房信息 Python爬虫入门 | 6 将爬回来的数据存到本地 Python爬虫入门 | 7 分类爬取豆瓣电影,解决动态加载问题
你可能感兴趣的:(Python爬虫入门 | 4 爬取豆瓣TOP250图书)
RK3588 ubuntu20.04 换源 aarch64源
苏三福
ubuntu
备份sudocp/etc/apt/sources.list/etc/apt/sources.list.backup编辑sudovim/etc/apt/sources.list拷贝一下:debhttps://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/focalmainrestricteduniversemultiversedeb-srchttps://mir
cmake Qt Mingw windows构建
极客-杀生丸
嵌入式 qt windows 开发语言
今天教大家怎么在windows构建qt应用使用cmd命令行,而不是一键通过QtCreator一键构建。首先我们用qtcreator创建一个模板程序(PS:记得在安装qt时要悬着mingw套件,如果安装太慢可以换源)输入以下的命令:mkdirbuildcdbuildcmake-G"MinGWMakefiles"-DCMAKE_PREFIX_PATH=D:/Qt2/6.5.3/mingw_64..mi
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_time_update函数
若云止水
ubuntu nginx linux
定义在src\core\ngx_times.c中ngx_time_init函数后面voidngx_time_update(void){u_char*p0,*p1,*p2,*p3,*p4;ngx_tm_ttm,gmt;time_tsec;ngx_uint_tmsec;ngx_time_t*tp;structtimevaltv;if(!ngx_trylock(&ngx_time_lock)){retu
深入解析C++静态关键字:生命周期、存储管理与C++11线程安全实现
zzr915
c++
目录1、静态关键字的作用2、静态关键字的使用规则2.1存储位置2.2初始化机制3、静态局部变量的线程安全性解析3.1C++11及之后的线程安全机制3.2C++11之前的风险3.3关键注意事项4、总结1、静态关键字的作用静态关键字(static)可调整变量的生存周期,使其与程序生命周期一致。例如:classInt{intvalue;public:Int(intx=0):value(x){coutda
C++中指针、引用与const的深入解析
zzr915
c++ 开发语言
一、对数组的引用constintn=10;intar[n]={12,23,34,45,56,67,78,89,100};描述数组:类型加上原始空间大小。int&ra=ar[1];int&br=ar;//errorint(&br)[n]=ar;//okint*pa[10];int&pr[10];//error;为什么不能编译成功引用数组的概念:在C++中,引用是一个别名,它必须被初始化以指向一个
ffmpeg 多路流处理在iOS的具体使用
陈皮话梅糖@
FFmpeg音视频高阶技术讲解 ffmpeg ios
多路流处理可以用于操作音视频文件中的多个流(如视频流、音频流、字幕流等),实现流的提取、替换、合并等操作。1.什么是多路流处理?1.1多路流的概念一个多媒体文件(如MP4、MKV)通常包含多个流:视频流:存储视频数据。音频流:存储音频数据。字幕流:存储字幕数据。FFmpeg提供了强大的工具来操作这些流,例如提取、替换、合并等。1.2常见的多路流操作操作类型功能描述提取流从文件中提取特定的流(如音频
基于Knative的无服务器引擎重构:实现毫秒级冷启动的云原生应用浪潮
桂月二二
云原生 knative serverless
引言:从微服务到无状态的量子跃迁当容器启动时间仍困在900ms高位时,某视频直播平台采用Knative将突发流量处理时效提升40倍,弹性扩缩响应速度突破至120ms级。基于流量预测的预启动算法与内核级资源复用池两大技术创新,正在重新定义Serverless时代的性能边界。IDC最新报告指出,采用该架构的企业资源利用率平均提升至78%,年度计算成本直降320万美元。一、传统FaaS模型的性能桎梏1.
前端构建工具——Webpack和Vite的主要区别
像素检测仪
前端 前端 webpack
目录1.设计理念2.性能表现3.使用场景4.配置复杂度5.生态系统6.性能对比总结7.选择建议1.设计理念Webpack设计理念:Webpack是一个通用的模块打包工具,它将项目中的各种资源(如JavaScript、CSS、图片等)视为模块,并通过loader和plugin进行处理和打包。适用范围:适用于复杂项目,支持高度定制化,适合需要精细控制构建过程的场景。Vite设计理念:Vite(法语“快
ffmpeg-cli-wrapper操作ffmpeg的工具
NaughtyBo
视频&流媒体 ffmpeg
学习链接ffmpeg-cli-wrapper-内部封装了操作ffmpeg命令的java类库,它提供了一些类和方法,可以方便地构建和执行ffmpeg命令,而不需要直接操作字符串或进程。并且支持异步执行和进度监听springboot-ffmpeg-m3u8-convertor-gitee代码-springboot+ffmpeg,将视频转换为m3u8格式。支持.mp4|.flv|.avi|.mov|.w
DeepSeek —— 金融市场中的AI颠覆者 !!!
云边有个稻草人
热门文章 人工智能 金融 大数据 DeepSeek
目录云边有个稻草人-CSDN博客引言第1章:DeepSeek的技术概述第2章:DeepSeek对金融行业的影响2.1自动化与决策支持2.2风险评估与管理2.3金融市场预测2.4高频交易与量化分析第3章:展示如何利用DeepSeek进行不同的金融数据分析3.1市场情绪分析3.2新闻事件对股票价格的影响3.3使用DeepSeek进行量化策略回测3.4使用DeepSeek进行投资组合优化第4章:金融界专
利用javaCV 将视频转为m3u8格式
daqinzl
流媒体 视频音频 ffmpeg javacv 视频转m3u8
参考链接https://blog.csdn.net/laow1314/article/details/128797915
2021-7-24 42. 接雨水(动态规划,双指针)
TABE_
注:题目:给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例1:输入:height=[0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示的高度图,在这种情况下,可以接6个单位的雨水(蓝色部分表示雨水)。示例2:输入:height=[4,2,0,3,2,5]输出:9提示:n==h
在IntelliJIDEA中使用Gradle创建Web项目的步骤
大G哥
前端 intellij-idea java ide
1.打开IntelliJIDEA启动IntelliJIDEA。2.创建新项目点击File>New>Project。在弹出的窗口中,选择Gradle作为项目类型。确保Java被选中。点击Next。3.配置项目GroupId:输入你的组织或项目组ID(例如:com.example)。ArtifactId:输入项目名称(例如:mywebapp)。点击Next。4.配置项目名称和位置Projectname
Java 基于 SpringBoot+Vue 的动漫平台(附源码,文档)
程序员徐师兄
java spring boot vue.js 动漫平台 动漫网站
博主介绍:✌程序员徐师兄、8年大厂程序员经历。全网粉丝12w+、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战*✌文末获取源码联系精彩专栏推荐订阅不然下次找不到哟2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅Java项目精品实战案例《500套》Java微信小程序项目实战《200套》Python项目实战《200套
Android系统开机时间优化-实践篇(一)
漫步的傻瓜
Android系统启动时间优化 android linux
Android系统开机时间优化目录背景正文优化内容小结产品功能:高清大屏、多路摄像头、蓝牙、WIFI、4G无线网络、收音机、语音识别等等。背景主芯片是多核处理器,高版本Android系统,启动时间相比android4.x的十几秒慢很多。优化前的状态:处理前已被优化的内容有:裁剪多余的原生apk和资源文件、部分耗时动作等,并修改log输出等级。这种情况下,启动时间,想比原生系统有较大改善,但不够理想
寄存器总结
黑客Jack
网络 web安全
寄存器8086CPU有14个寄存器它们的名称为:AX、BX、CX、DX、SI、DI、SP、BP、IP**、CS、DS、ES、**SS、PSW。8086CPU所有的寄存器都是16位的,可以存放两个字节。AX、BX、CX、DX通常用来存放一般性数据被称为通用寄存器。8086上一代CPU中的寄存器都是8位的;为保证兼容性,这四个寄存器都可以分为两个独立的8位寄存器使用。H高位(8-15)L低位(0-7)
Ubuntu 安装 OpenCV (C++)
LegendBIT
程序开发--基本工具 ubuntu opencv c++
版本详情:Ubuntu:22.04+5.15.0-133-genericgcc:11.4.0g++:11.4.0OpenCV:4.7.01.卸载OpenCV进入原先编译opencv的build目录,在该目录下打开终端,执行以下代码(如果build已经删除了,可以重新编译一遍该版本的opencv,然后在最后一步执行sudomakeuninstall)sudomakeuninstallcd..sudo
鸿蒙应用开发系列 EX篇:HarmonyOS应用开发者基础认证
李小白杂货铺
斜杠人生 harmonyos 华为 鸿蒙系统应用开发者基础认证 鸿蒙应用开发 鸿蒙系统应用开发
文章目录系列文章背景认证考试题库参考注意:题库会不定时的进行具备调整甚至整体轮换,此为2024.5月版本注意:题库中题目的选项每次都会随机顺序,请参考内容判断题单选题多选题系列文章鸿蒙应用开发系列篇一:鸿蒙系统概述鸿蒙应用开发系列篇二:鸿蒙系统开发工具与环境鸿蒙应用开发系列篇三:ArkTS语言鸿蒙应用开发系列篇四:鸿蒙系统应用开发基础鸿蒙应用开发系列篇五:鸿蒙系统高级开发技术鸿蒙应用开发系列篇六:
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(二) -> tabs
枫叶丹4
HarmonyOS 前端 javascript 开发语言 harmonyos 华为 华为云
目录1->创建Tabs2->设置Tabs方向3->设置样式4->显示页签索引5->场景示例1->创建Tabs在pages/index目录下的hml文件中创建一个Tabs组件。item1item2content1content2/*test.css*/.container{flex-direction:column;justify-content:center;align-items:center;
1、Android概述
守望178
Android
安卓(Android)是一种基于Linux的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。Android操作系统最初由AndyRubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以
Android开发笔记: 5种对话框案例
程序猿的杂货店
Android开发笔记 android开发笔记 PopupWindow AlertDialog ProgressDialog
5种android对话框1弹出普通对话框---系统更新2自定义对话框--用户登录3时间选择对话框--时间对话框4进度条对话框--信息加载..5popuWindow对话框下载地址:http://download.csdn.net/download/taoerit/99651421弹出普通对话框---系统更新//弹出普通对话框publicvoidshowNormalDialog(Viewv){Aler
DeepSeek 脱单秘籍,速看!
工程师焱记
AIGC deepseek
今天是2025-02-14,也就是情人节当天,不如用AI来脱单,说干就干。以下内容为deepseek给出的建议:形象管理:第一印象决胜法则外在提升:快速打理发型、搭配简约有质感的服装(如浅色系毛衣+大衣)。女生可化淡妆突出气色,男生保持面部清爽,避免邋遢。细节加分:喷淡香水(如柑橘调或木质香),携带小巧伴手礼(如巧克力或书签)以备见面时赠予对方。高效沟通:打破尴尬的黄金技巧幽默破冰:“听说今天全城
Electron常见问题 4-error: The engine “node“ is incompatible with this module.
Data-Mining
Electron实战 builder electron 编译 node.js yarn
目录问题解决PS:《Electron实战》系列-总览问题Electron工程编译的时候报错:
[email protected] :Theengine"node"isincompatiblewiththismodule.Expectedversion">=8.12.0".Got"8.11.3"errorFoundincompatiblemodule.解决原因是nodejs版本冲
MAVEN私服配置
可儿·四系桜
java maven java
声明:本用例访问的私服地址及密码为:访问私服:http://192.168.150.101:8081访问密码:admin/admin请按实际私服地址密码替换即可,该私服地址仅用于文档案例,实际不可访问。1.下载maven请根据实际情况按需下载即可。maven官网下载JDK对应的Maven版本:JDK版本Maven版本支持情况JDK1.3Maven2.0.11及以下JDK1.4Maven2.0.11
Jetson Agx Orin平台JP6.0-r36.3版本修复了vi模式下的原始图像损坏(线条伪影)
free-xx
Nvidia Jetson平台相机开发 驱动开发 jetson orin camera
1.问题描述这是JP-6.0GA/l4t-r36.3.0的一个已知问题通过vi模式捕获的图像会导致异常线条参考下面的快照来演示这些线伪影这个问题只能通过VI模式进行修复,不应该通过LibArgus看到。此外,这是由于内存问题。由于upstream已经将属性名称更改为“dma-noncoherent”。如果设备是一致的,内核将跳过CPU/设备同步。2.修复方法这里有两个修复方法来解决这个问题。(1)
Jetson AGX Orin平台Jetpack6.x版本相机驱动移植问题记录
free-xx
Nvidia Jetson平台相机开发 驱动开发 jetson orin nvidia
1.问题描述正在将相机驱动程序从R35.4迁移到R36.3;驱动程序在R35.4上工作正常,但在R36.3上不工作GStreamerwithnvarguscamerasrc采集异常但是v4l2-ctl采集正常2.常规问题排查2.1查询图像格式$v4l2-ctl-d/dev/video0--list-formats-extioctl:VIDIOC_ENUM_FMTType:VideoCapture[
Alpine 安装 应用错误 ERROR: unable to select packages
seojava
linux 运维 服务器
/#apkaddcurlfetchhttps://dl-cdn.alpinelinux.org/alpine/v3.19/community/x86_64/x86_64/APKINDEX.tar.gzWARNING:updatingandopeninghttps://dl-cdn.alpinelinux.org/alpine/v3.19/community/x86_64/:Nosuchfileor
数据结构 单链表
ZY-JIMMY
算法与数据结构精析 带头结点的单链表 线性表的链式存储结构
目录线性表的链式存储结构1、链接存储方法2、结点结构3、头指针head和终端结点线性表链式存储结构的建立单链表的基本操作1、初始化单链表2、得到一个结点3、头插法4、尾插法5、pos位置插入6、是否为空7、查找key的前驱8、删除data域为key的结点9、摧毁函数10、求单链表的长度11、打印单链表completecode线性表的链式存储结构单链表是一种链式存取的数据结构,用一组地址任意的存储单
轮播图html
The_era_achievs_hero
html 前端 javascript
题十二:轮播图要求:1.鼠标不在图片上方时,进行自动轮播,并且左右箭头不会显示;当鼠标放在图片上方时,停止轮播,并且左右箭头会显示;2.图片切换之后,图片中下方的小圆点会同时进行切换,并且点击相应的小圆点可以切换到相应的图片上;3.点击左右箭头可以进行左右图片的切换;4.图片上需有介绍的文字,会随图片切换一起进行切换。原理:当鼠标进入时,左走箭头出现,定时器关闭,离开时,箭头消失,定时器开启。写D
重写event函数
大G哥
4、重写event函数如果每个对象的事件处理函数有多个,可以一个个重写,也可以重写事件分发函数()。案例:4.1、新建工程4.2、重写该窗口的鼠标按下及抬起事件方式1:.h中声明登录后复制virtualvoidmousePressEvent(QMouseEvent*event);virtualvoidmouseReleaseEvent(QMouseEvent*event);1.2..cpp中实现登
对于规范和实现,你会混淆吗?
yangshangchuan
HotSpot
昨晚和朋友聊天,喝了点咖啡,由于我经常喝茶,很长时间没喝咖啡了,所以失眠了,于是起床读JVM规范,读完后在朋友圈发了一条信息:
JVM Run-Time Data Areas:The Java Virtual Machine defines various run-time data areas that are used during execution of a program. So
android 网络
百合不是茶
网络
android的网络编程和java的一样没什么好分析的都是一些死的照着写就可以了,所以记录下来 方便查找 , 服务器使用的是TomCat
服务器代码; servlet的使用需要在xml中注册
package servlet;
import java.io.IOException;
import java.util.Arr
[读书笔记]读法拉第传
comsci
读书笔记
1831年的时候,一年可以赚到1000英镑的人..应该很少的...
要成为一个科学家,没有足够的资金支持,很多实验都无法完成
但是当钱赚够了以后....就不能够一直在商业和市场中徘徊......
随机数的产生
沐刃青蛟
随机数
c++中阐述随机数的方法有两种:
一是产生假随机数(不管操作多少次,所产生的数都不会改变)
这类随机数是使用了默认的种子值产生的,所以每次都是一样的。
//默认种子
for (int i = 0; i < 5; i++)
{
cout<<
PHP检测函数所在的文件名
IT独行者
PHP 函数
很简单的功能,用到PHP中的反射机制,具体使用的是ReflectionFunction类,可以获取指定函数所在PHP脚本中的具体位置。 创建引用脚本。
代码:
[php]
view plain
copy
// Filename: functions.php
<?php&nbs
银行各系统功能简介
文强chu
金融
银行各系统功能简介 业务系统 核心业务系统 业务功能包括:总账管理、卡系统管理、客户信息管理、额度控管、存款、贷款、资金业务、国际结算、支付结算、对外接口等 清分清算系统 以清算日期为准,将账务类交易、非账务类交易的手续费、代理费、网络服务费等相关费用,按费用类型计算应收、应付金额,经过清算人员确认后上送核心系统完成结算的过程 国际结算系
Python学习1(pip django 安装以及第一个project)
小桔子
python django pip
最近开始学习python,要安装个pip的工具。听说这个工具很强大,安装了它,在安装第三方工具的话so easy!然后也下载了,按照别人给的教程开始安装,奶奶的怎么也安装不上!
第一步:官方下载pip-1.5.6.tar.gz, https://pypi.python.org/pypi/pip easy!
第二部:解压这个压缩文件,会看到一个setup.p
php 数组
aichenglong
PHP 排序 数组 循环 多维数组
1 php中的创建数组
$product = array('tires','oil','spark');//array()实际上是语言结构而不 是函数
2 如果需要创建一个升序的排列的数字保存在一个数组中,可以使用range()函数来自动创建数组
$numbers=range(1,10)//1 2 3 4 5 6 7 8 9 10
$numbers=range(1,10,
安装python2.7
AILIKES
python
安装python2.7
1、下载可从 http://www.python.org/进行下载#wget https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz
2、复制解压
#mkdir -p /opt/usr/python
#cp /opt/soft/Python-2
java异常的处理探讨
百合不是茶
JAVA异常
//java异常
/*
1,了解java 中的异常处理机制,有三种操作
a,声明异常
b,抛出异常
c,捕获异常
2,学会使用try-catch-finally来处理异常
3,学会如何声明异常和抛出异常
4,学会创建自己的异常
*/
//2,学会使用try-catch-finally来处理异常
getElementsByName实例
bijian1013
element
实例1:
<!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/1999/x
探索JUnit4扩展:Runner
bijian1013
java 单元测试 JUnit
参加敏捷培训时,教练提到Junit4的Runner和Rule,于是特上网查一下,发现很多都讲的太理论,或者是举的例子实在是太牵强。多搜索了几下,搜索到两篇我觉得写的非常好的文章。
文章地址:http://www.blogjava.net/jiangshachina/archive/20
[MongoDB学习笔记二]MongoDB副本集
bit1129
mongodb
1. 副本集的特性
1)一台主服务器(Primary),多台从服务器(Secondary)
2)Primary挂了之后,从服务器自动完成从它们之中选举一台服务器作为主服务器,继续工作,这就解决了单点故障,因此,在这种情况下,MongoDB集群能够继续工作
3)挂了的主服务器恢复到集群中只能以Secondary服务器的角色加入进来
2
【Spark八十一】Hive in the spark assembly
bit1129
assembly
Spark SQL supports most commonly used features of HiveQL. However, different HiveQL statements are executed in different manners:
1. DDL statements (e.g. CREATE TABLE, DROP TABLE, etc.)
Nginx问题定位之监控进程异常退出
ronin47
nginx在运行过程中是否稳定,是否有异常退出过?这里总结几项平时会用到的小技巧。
1. 在error.log中查看是否有signal项,如果有,看看signal是多少。
比如,这是一个异常退出的情况:
$grep signal error.log
2012/12/24 16:39:56 [alert] 13661#0: worker process 13666 exited on s
No grammar constraints (DTD or XML schema).....两种解决方法
byalias
xml
方法一:常用方法 关闭XML验证
工具栏:windows => preferences => xml => xml files => validation => Indicate when no grammar is specified:选择Ignore即可。
方法二:(个人推荐)
添加 内容如下
<?xml version=
Netty源码学习-DefaultChannelPipeline
bylijinnan
netty
package com.ljn.channel;
/**
* ChannelPipeline采用的是Intercepting Filter 模式
* 但由于用到两个双向链表和内部类,这个模式看起来不是那么明显,需要仔细查看调用过程才发现
*
* 下面对ChannelPipeline作一个模拟,只模拟关键代码:
*/
public class Pipeline {
MYSQL数据库常用备份及恢复语句
chicony
mysql
备份MySQL数据库的命令,可以加选不同的参数选项来实现不同格式的要求。
mysqldump -h主机 -u用户名 -p密码 数据库名 > 文件
备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
mysqldump -–add-drop-table -uusername -ppassword databasename > ba
小白谈谈云计算--基于Google三大论文
CrazyMizzz
Google 云计算 GFS
之前在没有接触到云计算之前,只是对云计算有一点点模糊的概念,觉得这是一个很高大上的东西,似乎离我们大一的还很远。后来有机会上了一节云计算的普及课程吧,并且在之前的一周里拜读了谷歌三大论文。不敢说理解,至少囫囵吞枣啃下了一大堆看不明白的理论。现在就简单聊聊我对于云计算的了解。
我先说说GFS
&n
hadoop 平衡空间设置方法
daizj
hadoop balancer
在hdfs-site.xml中增加设置balance的带宽,默认只有1M:
<property>
<name>dfs.balance.bandwidthPerSec</name>
<value>10485760</value>
<description&g
Eclipse程序员要掌握的常用快捷键
dcj3sjt126com
编程
判断一个人的编程水平,就看他用键盘多,还是鼠标多。用键盘一是为了输入代码(当然了,也包括注释),再有就是熟练使用快捷键。 曾有人在豆瓣评
《卓有成效的程序员》:“人有多大懒,才有多大闲”。之前我整理了一个
程序员图书列表,目的也就是通过读书,让程序员变懒。 程序员作为特殊的群体,有的人可以这么懒,懒到事情都交给机器去做,而有的人又可以那么勤奋,每天都孜孜不倦得
Android学习之路
dcj3sjt126com
Android学习
转自:http://blog.csdn.net/ryantang03/article/details/6901459
以前有J2EE基础,接触JAVA也有两三年的时间了,上手Android并不困难,思维上稍微转变一下就可以很快适应。以前做的都是WEB项目,现今体验移动终端项目,让我越来越觉得移动互联网应用是未来的主宰。
下面说说我学习Android的感受,我学Android首先是看MARS的视
java 遍历Map的四种方法
eksliang
java HashMap java 遍历Map的四种方法
转载请出自出处:
http://eksliang.iteye.com/blog/2059996
package com.ickes;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
/**
* 遍历Map的四种方式
【精典】数据库相关相关
gengzg
数据库
package C3P0;
import java.sql.Connection;
import java.sql.SQLException;
import java.beans.PropertyVetoException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class DBPool{
自动补全
huyana_town
自动补全
<!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/1999/xhtml&quo
jquery在线预览PDF文件,打开PDF文件
天梯梦
jquery
最主要的是使用到了一个jquery的插件jquery.media.js,使用这个插件就很容易实现了。
核心代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.
ViewPager刷新单个页面的方法
lovelease
android viewpager tag 刷新
使用ViewPager做滑动切换图片的效果时,如果图片是从网络下载的,那么再子线程中下载完图片时我们会使用handler通知UI线程,然后UI线程就可以调用mViewPager.getAdapter().notifyDataSetChanged()进行页面的刷新,但是viewpager不同于listview,你会发现单纯的调用notifyDataSetChanged()并不能刷新页面
利用按位取反(~)从复合枚举值里清除枚举值
草料场
enum
以 C# 中的 System.Drawing.FontStyle 为例。
如果需要同时有多种效果,
如:“粗体”和“下划线”的效果,可以用按位或(|)
FontStyle style = FontStyle.Bold | FontStyle.Underline;
如果需要去除 style 里的某一种效果,
Linux系统新手学习的11点建议
刘星宇
编程 工作 linux 脚本
随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起。这里介绍学习Linux的一些建议。
一、从基础开始:常常有些朋友在Linux论坛问一些问题,不过,其中大多数的问题都是很基础的。例如:为什么我使用一个命令的时候,系统告诉我找不到该目录,我要如何限制使用者的权限等问题,这些问题其实都不是很难的,只要了解了 Linu
hibernate dao层应用之HibernateDaoSupport二次封装
wangzhezichuan
DAO Hibernate
/**
* <p>方法描述:sql语句查询 返回List<Class> </p>
* <p>方法备注: Class 只能是自定义类 </p>
* @param calzz
* @param sql
* @return
* <p>创建人:王川</p>
* <p>创建时间:Jul