发出前两篇Python实战的文章之后,有同学和我反映:你的想法很牛逼,可是我就是看不懂你写的是什么,我Python不熟悉,看起来有点吃力 。我细细一琢磨,这点是个问题。对于熟悉Python的同学,能够看懂我思路,但是对于那些没有Python基础,或者对Python不熟悉的同学,这样直接扔过来,可能会让他们失望而归。所以,这回我弄了一期手把手的实战教程,同时,在文章中遇到的知识点,还会有提供链接。完全对新手有好。
在前两篇Python实战「用代码来访问1024网站」和「用Scrapy编写“1024网站种子吞噬爬虫”」收到了大家的一致好评,可能文章写得比较匆忙,有些术语可能对于Python的初级玩家不是很好理解。所以,我特别准备了一下,用超级详细的解说,细化到每一步,提供查询链接等方法,为Python初级玩家,Python小白和对Scrapy框架不熟悉的同学,的制作了这篇手把手Python实战教程:用Scrapy爬取下载达盖尔社区的资源。
好了,废话不多说,学习代码就是要学以致用的。不能写了一遍代码就让代码吃灰。下面就跟我一起来搞吧。
小草网站是个好网站,我们这次实战的结果,是要把“达盖尔旗帜”里面的帖子爬取下来,将帖子的图片保存到本地,同时将帖子的一些相关信息,写入到本地的MongoDB中。这么乍一听,感觉我们做的事情好像挺多的,别慌,我带你慢慢的一步一步来搞起,问题不是很大。
手把手 Step By Stefp
Scrapy可以通过pip来安装:
$ pip install scrapy
复制代码
接下来,我们去事先建好的工程目录里面,创建Scrapy的项目。这里,我们先看一下Scrapy的命令行怎么用,输入$ scray -help
出来
看到,创建scrapy的工程的命令是$ scrapy startproject
创建完的结果如下:
OK,这个时候,我们的目录内容变成了如下结构:
下一步就是创建我们的爬虫,还是依靠Scrapy本身自带的命令来创建。输入Scrapy自带四种爬虫模板:basic ,crawl ,csvfeed 和xmlfeed 四种。我们这里选择basic。
$ scrapy genspider --template=basic superspider bc.ghuws.men
复制代码
创建成功,会出现以下提示:
这时候我们的工程目录就变成了这个样子:
看到我们的工程里面多了一个spiders文件夹,里面有一个superspider.py
文件,这个就是我们这次程序的主角。我们来看,这个可爱的小虫子刚生下来是长这个样子的:
这里呢,就简单说一下:
name - 是咱们的爬虫名字,这个主要是在运行爬虫的时候会用到。
allowed_domains - 是在scrapy自带的OffsiteMiddleware中用到的。Scrapy默认会开启OffsiteMiddleware插件,不在此允许范围内的域名就会被过滤,而不会进行爬取。
start_urls - 爬虫开始爬取的url。
parse()方法 - 这个就是处理请求结果的。我们具体的爬虫逻辑大部分就是在这里写。
好了,废话不多说,既然start_urls是用来做爬虫开始爬取的第一个url,那么我们就应该把这里面的数值换成达盖尔社区的地址,然后我们看一下在parse()
里面返回的值是什么。运行方法,就是输入$ scrapy crawl superspider
指令即可:
我们看到,这个response是一个HtmlResponse类,它里面的text属性,里面的字符串就是网页的html文件。OK,这一步结束之后,我们下一步就想办法怎样能够解析html网页了。Scrapy是提供了html对象的解析的,它有一个selector类,可以解析html,同时,里面还支持xpath语法的查找和css的查找。但是这个个人感觉不是很好用,我推荐用BeautifulSoup4库。安装方法只需要$ pip install beautifulsoup4
。我们这里需要用这个来解析html,所以讲BeautifulSoup4导进来,在解析,然后我们就会得到一个beasutifulsoup对象。之后,我们就要在这个对象里面寻找我们需要解析的对象。
目前网页已经解析好了,下一步就是要在html文件中,找到每一个帖子的信息。我们回头来看html文件的源码,可以看到,每一个帖子其实都是在一个tag里面,其实我们需要的东西,就是下图红色框框里面圈的
tag。
这里,我们发现,每一个帖子的链接入口,也就是
tag是有两个特性,一个是有id值,另一个是有href
值。所以,我们要针对soup对象,调用find_all()
方法来寻找有特定内容的所有标签。
我们得到了一个 a_list
结果,这是一个list对象,长度102。在这些数据中,有些结果是我们不要的,比如000到007位置的这几个数据,他们在网页中对应的是版规之类的帖子信息,和我们想要的东西不一样,所以,在拿到这个a_list
数据,我们需要进行一下筛选。
筛选的过程必不可少,筛选的方法有很多种,我们这里就做的简单一点,只选取18年的帖子。为什么会是18年的帖子啊?少年你看,这一列href的值:
第二个数字“1805”,应该就是“年份+月份”。如果不信,则可以跳到比如论坛100页,看到的是16年3月份的帖子,这里面随便检查一个连接的href值,是“1603”。这就印证了我们的想法是正确的。好,按照这个筛选18年的帖子的思路,我们来筛选一下a_list
。
看到打印的结果却是是18年的帖子。但是目前的href并不是帖子真正的url。真正的url应该长这个样子:
http://bc.ghuws.men/htm_data/16/1805/3126577.html
复制代码
所以,我们这里得进行拼接。对比上面的url,我们目前只有后半部分,前半部分其实是社区网站的root url。那么我们在settings.py文件里面添加一个ROOT_URL
变量,并将这个变量导入到我们的spider中即可。代码就变成了这样。为了方便,咱们还可以把帖子的id,也就是.html
前面的那个数字也摘出来,方便日后使用。
目前为止,我们拿到了帖子的id和帖子的url。我们的最终目的是要下载图片,所以,我们得让爬虫去按照帖子的url去爬取他们。爬虫需要进入第二层。这里,我们需要使用yield
函数,调用scrapy.Request
方法,传入一个callback,在callback中做解析。
现在我们已经进入了每一个帖子的内部,我们现在还没有拿到的信息有帖子的标题和帖子的图片。还是和parse()的步骤一样,这个时候,我们就该分析帖子的html文件了。 我们先找标题。看到html文件中,标题对应的是一个
标签。
那这就简单了,我们只需要找到所有的
标签,然后看标题是第几个就好。接下来是图片了。每个帖子用的图床都不一样,所以图片部分,我们先来看一下结构:
大概就是这两种,我们看到,图片的标签是
,关键点就在type=image
上面,所以我们尝试着看看能不能根据这个来找到图片的地址。
我们简单测试一下,看看运行效果:
完全没有问题,看着好爽。这时候,我们看结果,会发现,我们抓取到的image,会有一两个的图床是不一样的。
打开也会看到这个图片,里面的内容也和其他的图片不一样,并且这个图片不是我们想要的。所以,这里我们得做一下过滤。我这里的方法就是要从找到的image_list
里面,把少数图床不一样的图片url给过滤掉。一般看来,都是找到的第一个图片不是我们想要的,所以我们这里只是判断一下第一个和第二个是否一样就可以。
这样打印出来的结果就没有问题喽。
哈哈,现在我们已经拿到了帖子的id,标题,帖子的url地址,还有帖子里面图片的url地址。离我们的目标又近了一步。我之前说过,我们的目标是要把每张图片都保存在本地,目前我们只是拿到了每张图片的url。所以,我们需要把图片都下载下载下来。
其实,当拿到图片的URL进行访问的时候,通过http返回的数据,虽然是字符串的格式,但是只要将这些字符串保存成指定的图片格式,我们在本地就可以按照图片的解析来打开。这里,我们拿到帖子的image_list
,就可以在yield出一层请求,这就是爬虫的第三层爬取了。
同时,在第三层爬虫里面,我们还需要将访问回来的图片保存到本地目录。那么代码就长这个样子:
在上面第二次爬取函数的最后,有个地方需要注意一下,就是上图中红色框框圈出来的地方。这里需要加上dont_filter=True
。否则就会被Scrapy给过滤掉。因为图床的地址,并未在我们刚开始的allow_domain
里面。加上这个就可以正常访问了。
这样运行一遍,我们的本地目录里面就会有保存好的下载照片了。
我们还有个问题,就是我们需要将每个帖子的信息(id,title,url,和 image )都保存到本地的数据库中。这个该怎么做?
别慌,这个其实很简单。
首先,我们得针对每个帖子,建立一个Scrapy的item。需要在items.py里面编写代码:
写好之后,我们需要在爬虫里面引入这个类,在第二层解析函数中,构建好item,最后yield出来。这里,yield出来,会交给Scrapy的pipeline
来处理。
yield出来的item会进入到pipeline中。但是这里有个前提,就是需要将pipeline在settings.py中设置。
pipeline中我们先打印帖子的id,看看数据能不能够传入到这里
运行:
看到数据是完全可以过来的,而且在Scrapy的log中,会打印出来每一个item里面的信息。
我们如果想把数据保存到MongoDB 中,这个操作就应该是在pipeline中完成的。Scrapy之所以简历pipeline就是为了针对每个item,如果有特殊的处理,就应该在这里完成。那么,我们应该首先导入pymongo
库。然后,我们需要在pipeline的__init__()
初始化进行连接数据库的操作。整体完成之后,pipeline应该长这个样子:
那么我们来测试一下数据是否能够存入到MongoDB中。首先,在terminal中,通过命令$ sudo mongod
来启动MongoDB。
那么运行一下,看一下效果:
可以看到,左侧,有名为Daguerre
的数据库,里面有名为postTable
的表,而且我们的数据成功的写入了数据库中。数据的格式如图所展示,和我们预期的结果是一样的。
目前为止,我们完成了:从一页page中,获得所有帖子的url,然后进入每个帖子,再在帖子中,爬取每个帖子的图片,下载保存到本地,同时把帖子的信息存储到数据库中。
但是,这里你有没有发现一个问题啊?我们只爬取了第一页的数据,那如何才能爬取第二页,第三页,第N页的数据呢?
别慌,只需要简单的加几行代码即可。在我们的spider文件中的parse()
方法地下,加一个调用自己的方法即可,只不过,传入的url得是下一页的url,所以,我们这里得拼凑出下一页的url,然后再次调用parse()
方法即可。这里为了避免无限循环,我们设定一个最大页数MAX_PAGES
为3,即爬取前三页的数据。
OK,这样就完事儿了,这个达盖尔旗帜的爬虫就写好了。我们运行一下瞅瞅效果:
是不是非常的酷炫?再来看看我们的运行结果:
只能说,战果累累,有图有真相。
其实,这个程序,可以加入middleware,为http请求提供一些Cookie和User-Agents来防止被网站封。同时,在settings.py文件中,我们也可以设置一下DOWNLOAD_DELAY
来降低一下单个的访问速度,和CONCURRENT_REQUESTS
来提升一下访问速度。
就像之前EpicScrapy1024项目里面一样。喜欢的同学,可以去借鉴那个项目代码,然后融会贯通,自成一派,爬遍天下网站,无敌是多么的寂8 寞~~~~
好啦,能看到这里说明少年你很用心,很辛苦,是一个可塑之才。
废话不说,看到这里是有奖励的。关注“皮克啪的铲屎官 ”,回复“达盖尔 ”,即可获得项目源码和说明文档。同时,可以在下面的菜单中,找到“Python实战 ”按钮,能够查看以往文章,篇篇都非常精彩的哦~
扯扯皮,我觉得学习编程最大的动力就是爱好,其实干什么事情都是。爱好能够提供无线的动力,让人元气满满的往前冲刺。代码就是要方便作者,方便大家。写出来的代码要有用处,而且不要吃灰。这样的代码才是好代码。欢迎大家关注我的公众号,“皮克啪的铲屎官”,之后我会退出Python数据分析的内容,可能会结合量化交易之类的东西。
最后,来贴一张达盖尔的图片,纪念一下这位为人类做出杰出贡献的人。
推荐阅读:
【Python实战】用Scrapy编写“1024网站种子吞噬爬虫”,送福利 【Python实战】用代码来访问1024网站,送福利
![关注公众号“皮克啪的铲屎官”,回复“达盖尔”就可以获得惊喜](底部二维码.png
)
你可能感兴趣的:(【Python实战】手把手超详细教程教你Scrapy爬达盖尔社区,有彩蛋)
差分进化算法DE
DroidMind
智能算法与机器学习 差分进化算法
差分进化算法DE属于进化算法,这里算法还包括依次遗传算法、进化策略、进化规划。差分进化算法包括三个基本的操作:变异操作、交叉(重组)操作和选择操作。一、算法建模:1、假设我们希望得到函数f(x)的最优解,这个函数有D个解。2、为函数f(x)设置一个解的组数N,N至少为4。3、这样我们就得到了N组并且每组解的个数为D的集合,它可以使用N个D维参数向量来表示。因为它类似于遗传算法进化一样,是一代一代的
Android 应用添加系统签名权限介绍
佳哥的技术分享
android
一、前言Android应用添加系统签名就能获取到系统权限调用一些系统接口,添加系统签名的方式主要包括:在AndroidStudio中配置签名文件生成apk和在源码目录编译添加系统签名生成apk。本文介绍的都是一些基础的签名知识,后续延伸介绍相关权限内容。有兴趣的可以进行了解。二、Android应用添加系统签名权限的几种方式介绍1、在AndroidStudio添加系统签名文件对应需要签名的modul
MySQL 可视化工具
2301_78094384
工具 mysql
navicat优点:使用广泛,老牌软件,功能强大缺点:收费HeidiSQL免费,有免安装版本DownloadHeidiSQL//portable:便携式的下载后解压,双击运行左下角新建,然后输入配置,连接就可以使用了
Python常用OS库之path模块学习
风陵苑主
python 学习
学习python没有太多捷径,有也只有技巧,更重要的是要多学多练,个人觉得练更重要,读万卷书不如行万里路。编程是一门技能,所以除了看还要多实践,写得多了自然也就有了路。如果看全部的标准库文档,可以访问这个链接os---多种操作系统接口—Python3.12.3文档接下来就来敲敲OS库下的path方法,这里只是记录一下,搬运工作,加深印象。那就开始吧。os.path常用方法一、os.path.abs
fgets、scanf存字符串应用
malloc-free
c语言
题目1夺旗(英语:Capturetheflag,简称CTF)在计算机安全中是一种活动,当中会将“旗子”秘密地埋藏于有目的的易受攻击的程序或网站。参赛者从其他参赛者或主办方偷去旗子。非常崇拜探姬的小学妹最近迷上了CTF,学长给了她一个压缩包,让她找到其中的flag并提交。她今天终于破解了压缩包的密码,但解压后她却发现,里面竟然有足足100个txt文件!她使用Ctrl+F大法搜索过后,发现了这些txt
手把手教你 AI 顾投:在 Ollama 中使用 Python 调用金融 API 服务
老余捞鱼
AI探讨与学习 人工智能 python 金融 llama
作者:老余捞鱼原创不易,转载请标明出处及原作者。写在前面的话:尽管Ollama本身不是一个大型语言模型(LLM)开发工具,而是一个LLM的平台。但它最近宣布了其系统中直接使用工具调用的功能,本文主要介绍了最新版本的主要更新,特别是关于功能调用的使用,并演示了如何在Ollama中使用Python调用外部API服务。一、部署Ollama在本地运行1.1设置开发环境在开始编写代码之前,最好的做法是建立一
大数据是什么?用浅显的语言揭开神秘面纱
Echo_Wish
大数据 大数据 单例模式
大数据是什么?用浅显的语言揭开神秘面纱在我们生活的时代,“大数据”已经从一个技术术语,成为了街头巷尾时常听到的词汇。然而,究竟什么是大数据?它离我们有多远?我们该如何理解这个复杂又常用的概念?作为一名深耕大数据领域的创作者,我希望用通俗易懂的语言,结合生活实例和代码,为大家揭开大数据的神秘面纱。一、大数据的定义:比“大”更重要的是“复杂性”从广义上讲,大数据指的是无法通过传统手段高效处理的数据集合
《小型开发者在鸿蒙Next上的成本与收益平衡之道》
深度学习人工智能算法
学习成本鸿蒙Next系统与安卓、iOS在系统架构、API等方面存在一定差异,小型开发者需要花费时间和精力去熟悉和掌握。例如,开发者需要学习鸿蒙的分布式架构、原生智能等新技术概念和开发方法,这可能需要参加培训课程、阅读文档或在社区中与其他开发者交流学习。开发成本功能越复杂、UI/UX设计要求越高,开发成本就越高。小型开发者可能需要投入更多的人力和时间来进行应用的设计和开发。如果开发者经验不足,开发效
jmeter录制 过滤_Jmeter录制pc脚本
weixin_39757040
jmeter录制 过滤
1.打开jmeter后可以看到左边窗口有个“测试计划”和“工作台”,右键“测试计划”,添加Threads(Users)→线程组,再右键线程组→添加配置元件→Http请求默认值Http请求默认值窗口下---在web服务器处的“服务器名称或IP”填上网址或IP(本地就填localhost的IP,端口填你部署的服务器端口,路径就填写域名后面的路径。2.可以有可以无。[作用:清楚所有录制的记录信息]3.右
python与mysql交互_Python和Mysql交互
weixin_39703561
python与mysql交互
安装引入模块~安装mysql模块sudoapt-getinstallpython-mysqldb~在文件中引入模块importMySQLdbConnection对象用于建立与数据库的连接,创建对象:调用connect()方法conn=MySQLdb.connect(参数列表)其中参数列表有:host:连接的mysql主机,如果本机是'localhost';port:连接的mysql主机的端口,默认
程序执行原理(科普)
weixin_30832983
python 操作系统
程序执行原理(科普)目标计算机中的三大件程序执行的原理程序的作用01.计算机中的三大件计算机中包含有较多的硬件,但是一个程序要运行,有三个核心的硬件,分别是:CPU中央处理器,是一块超大规模的集成电路负责处理数据/计算内存临时存储数据(断电之后,数据会消失)速度快空间小(单位价格高)硬盘永久存储数据速度慢空间大(单位价格低)CPU内存硬盘思考题计算机中哪一个硬件设备负责执行程序?CPU内存的
[20250119]-前端面试题——React篇
前端
[20250119]-前端面试题——React篇面试问题记录问题1请简单介绍一下React18有哪些更新。回答:React18的主要更新包括:并发渲染:React18引入了并发渲染(ConcurrentRendering),使得React能在后台进行渲染工作,避免阻塞UI更新,提升性能。自动批处理:React18会自动批处理多次setState更新,减少不必要的渲染,提升性能。useIdHook:
虚拟专用网络(VPN)的 30 个知识 | 附带华为防火墙 IPSec VPN 配置实例
IT运维大本营
网络 华为 php
虚拟专用网络(VPN)定义:VPN就是一种能在公共网络上弄出个安全的私人网络的技术,靠加密连接实现。工作原理:VPN会通过隧道协议在用户的设备和VPN服务器之间弄出个加密的通道,这样就能保护数据传输啦。加密协议:常见的VPN加密协议有OpenVPN、L2TP/IPsec、PPTP和IKEv2这些。匿名性:用VPN能把用户的IP地址藏起来,这样上网的时候匿名性就高啦。安全性:VPN能保护用户在公共W
机器学习数学基础-极值和最值
华东算法王(原聪明的小孩子
小孩哥解析宋浩微积分 机器学习 算法 人工智能
极值和最值极值和最值是数学中关于函数变化的重要概念,它们描述了函数在某些点附近或在整个定义域内的“最大”或“最小”行为。理解极值和最值对优化问题、函数分析、物理建模等领域有重要的应用。1.极值(LocalExtrema)极值是指函数在某个区间内的某一点取得的局部最大值或最小值。(1)局部最大值(LocalMaximum)一个函数在某点(x=c)取得局部最大值,意味着存在一个包含(c)的小区间,使得
leetcode152.乘积最大子数组
努力d小白
# 动态规划 算法 数据结构 leetcode
给你一个整数数组nums,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。测试用例的答案是一个32-位整数。示例1:输入:nums=[2,3,-2,4]输出:6解释: 子数组[2,3]有最大乘积6。示例2:输入:nums=[-2,0,-1]输出:0解释: 结果不能为2,因为[-2,-1]不是子数组。思路:注意这道题涉及到符号问题;dp[i]表示以n
leetcode437.路径总和III
努力d小白
# 二叉树 java 算法 开发语言
标签:前缀和问题:给定一个二叉树的根节点root,和一个整数targetSum,求该二叉树里节点值之和等于targetSum的路径的数目。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。示例1:输入:root=[10,5,-3,3,2,null,11,3,-2,null,1],targetSum=8输出:3解释:和等于8的路径有3条,如图所示。示例
leetcode 2545.根据第K场考试的分数排序
付宇轩
leetcode 算法
1.题目要求:班里有m位学生,共计划组织n场考试。给你一个下标从0开始、大小为mxn的整数矩阵score,其中每一行对应一位学生,而score[i][j]表示第i位学生在第j场考试取得的分数。矩阵score包含的整数互不相同。另给你一个整数k。请你按第k场考试分数从高到低完成对这些学生(矩阵中的行)的排序。返回排序后的矩阵。示例1:输入:score=[[10,6,9,1],[7,5,11,2],[
【经典必看】对数价格刻度 vs. 线性价格刻度:有什么区别?Logarithmic Price Scale vs. Linear Price Scale: What‘s the Difference?
精通代码大仙
投资 数据挖掘 python 机器学习 人工智能 大数据 深度学习 自然语言处理
对数价格刻度vs.线性价格刻度:有什么区别?对数价格刻度vs.线性价格刻度:概览股票图表的解读可以根据查看数据时使用的不同价格刻度而有所不同。大多数在线和经纪商图表软件可以显示不同风格的图表。最常用的两种价格刻度用于分析价格变动:对数价格刻度—也称为“对数”—表示价格间距取决于基础资产价格的变化百分比。这通常是默认的图表样式。线性价格刻度—也称为“算术”—表示价格在Y轴上的间距是等距的。线性图表显
C#使用异步编程的好处
贰貮
c#
C#不是异步编程的好处避免线程等待耗时操作,但是使用await还是要等待,反正都是等待,有啥区别呢?在C#中,异步编程的好处不仅仅是简单地避免线程等待耗时操作。尽管从表面上看,使用await关键字时程序似乎在等待某个操作完成,但实际上这种等待与传统的同步等待有着本质的区别。以下是异步编程与同步编程在等待耗时操作时的主要区别:异步编程的好处:不阻塞线程:当在异步方法中遇到await表达式时,该方法会
【LC】2545. 根据第 K 场考试的分数排序
庞传奇
LeetCode题解 Java 算法 算法 java leetcode 数据结构
题目描述:班里有m位学生,共计划组织n场考试。给你一个下标从0开始、大小为mxn的整数矩阵score,其中每一行对应一位学生,而score[i][j]表示第i位学生在第j场考试取得的分数。矩阵score包含的整数互不相同。另给你一个整数k。请你按第k场考试分数从高到低完成对这些学生(矩阵中的行)的排序。返回排序后的矩阵。示例1:输入:score=[[10,6,9,1],[7,5,11,2],[4,
【Python爬虫实战】深入解析 Scrapy 管道:数据清洗、验证与存储的实战指南
易辰君
python爬虫 python 爬虫 开发语言
个人主页:易辰君-CSDN博客系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html目录前言一、了解ScrapyShell二、配置文件settings.py(一)为什么需要配置文件(二)配置文件的使用方法(三)常用字段及其含义三、管道的深入使用(一)管道的常用方法(二)管道的实现(三)启用管道四、管道的常见应用场景五、管道使用
电脑有两张网卡,如何实现同时访问外网和内网?
IT运维大本营
电脑 外网 内网 网卡
要是想让一台电脑用两张网卡,既能访问外网又能访问内网,那可以通过设置网络路由还有网卡的IP地址来达成。检查一下网卡的连接得保证电脑的两张网卡分别连到外网和内网的网络设备上,像路由器或者交换机啥的。给网卡配上不一样的IP地址分别给每张网卡设置IP地址,让它们对应的网络能正常通信:内网网卡:把它设置成内网网段的IP地址(像192.168.x.x或者其他内网地址)。外网网卡:可以设置成外网路由器分配的I
处理没有提示的字符串、计算相隔天数应用题
malloc-free
算法 c语言
正常情况下,小云每天跑1千米。如果某天是周一或者月初(1日),为了激励自己,小云要跑2千米。如果同时是周一或月初,小云也是跑2千米。小云跑步已经坚持了很长时间,从1990年1月1日周一(含)到2022年2月20日周日(含)。请问某一天小云总共跑步多少千米?输入格式:有多组数据,每行为三个正整数,且不超过小云跑步日期的范围。输出格式:对每一组输入,在一行中输出小云总共跑步多少千米。输入样例:2020
21天学通C++第八章——指针
不想睡觉_
QT客户端学习路线 c++ 开发语言
C++虽然可以动态的管理内存,但是并不能像其他高级语言如JAVA、C#有自动垃圾收集器去对应用程序的内存进行清理。常见指针错误内存泄漏解释:在使用完new申请内存之后,没有配套的delete,则之后会产生内存泄漏。即如何理解,当ptr指向new1,使用完成以后未使用delete对new1所占用的空间释放,然后又将ptr=new2,则会产生内存泄漏,即new1未被释放的同时也没有指针指向,即产生内存
FFA 2024 「流批一体」专场:探索在不同场景的流批一体
Apache Flink
FlinkForwardAsia2024即将盛大开幕!作为ApacheFlink社区备受期待的年度盛会之一,本届大会将于11月29至30日在上海隆重举行。FlinkForwardAsia(简称FFA)是由Apache官方授权的社区技术大会,旨在汇聚领先的行业实践与技术动态。在众多合作伙伴和技术开发者的支持下,FFA已成功举办六届。适逢ApacheFlink诞生10周年,今年的FFA将与广大开发者分
4.指派问题匈牙利解法以及其优化
HughSylar
转载 z
指派问题匈牙利解法以及其优化本人第一次写blog,难免有不足之处,还请大家不吝指正。1、问题的提出简单的说,n个人恰好分别承担n个任务,每个人对于不同的任务效率不同;我们的目的就是为使任务完成效率尽可能的高。例如:有4个工人,要分别指派他们完成4项不同的工作,每人做各项工作所消耗的时间如下表所示,问应如何指派工作,才能使总的消耗时间为最少。若用0-1整数规划问题的常规思路来解,即:解:令xij=1
python中drop用法 去重_如何使用drop_duplicates进行简单去重(入门篇)
weixin_39991055
python中drop用法 去重
什么是去重呢?简单来说,数据去重指的是删除重复数据。在一个数字文件集合中,找出重复的数据并将其删除,只保存唯一的数据单元。在我们的数据预处理过程中,这是一项我们经常需要进行的操作。去重有哪些好处?节省存储空间提升写入性能提高模型精度今天我们就来简单介绍一下,在pandas中如何使用drop_duplicates进行去重。一、函数体及主要参数函数体:df.drop_duplicates(subset
python中legend设置_如何使用python legend()函数?
weixin_39906130
python中legend设置
当我们需要去设置一个图示,并且在细节掌控上需要我们对于背景的颜色,以及边框颜色等属性,需要去做处理的时候,一般大家想到的模块或者函数都只能解决部分。结合起来可以完成上述所说的要求,但是有一个函数是专门为制定个性化的图例而工作的,这就是本章要跟大家介绍的legend()函数。函数功能:设置图例的字体、大小、颜色等属性,制定个性化。函数语法:plt.legend()函数参数:Loc,指代地理位置实例代
linux进程状态Ds,Linux下ps aux中进程状态为Ss,S+, Rs,Ds是什么意思?
weixin_39816062
linux进程状态Ds
系统维护的时候难免会遇到进程的状态的查询和管理,到底什么是R,有的是S,有的还是S+呢?一直有些混沌的问题,今天细细的来总结一下:PS是用来报告系统中程序执行状况的命令这个是无可厚非的,linux进程的状态:D不可中断睡眠(通常是在IO操作)收到信号不唤醒和不可运行,进程必须等待直到有中断发生R正在运行或可运行(在运行队列排队中)S可中断睡眠(休眠中,受阻,在等待某个条件的形成或接受到信号)T已停
PAT (Basic Level) Practice 乙级1001-1020
今天_也很困
算法 数据结构 c++
制作不易,大家的点赞和关注就是我更新的动力!由于这些题全是大一寒假刷的,部分还是c语言,部分的解题方法比较复杂,希望大家体谅。有问题欢迎大家在评论区讨论,有不足也请大家指出,谢谢大家!温馨提示:可以点目录跳转到相应题目哦。1001害死人不偿命的(3n+1)猜想分数15作者CHEN,Yue单位浙江大学卡拉兹(Callatz)猜想:对任何一个正整数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么
java封装继承多态等
麦田的设计者
java eclipse jvm c encapsulatopn
最近一段时间看了很多的视频却忘记总结了,现在只能想到什么写什么了,希望能起到一个回忆巩固的作用。
1、final关键字
译为:最终的
&
F5与集群的区别
bijian1013
weblogic 集群 F5
http请求配置不是通过集群,而是F5;集群是weblogic容器的,如果是ejb接口是通过集群。
F5同集群的差别,主要还是会话复制的问题,F5一把是分发http请求用的,因为http都是无状态的服务,无需关注会话问题,类似
LeetCode[Math] - #7 Reverse Integer
Cwind
java 题解 Math LeetCode Algorithm
原题链接:#7 Reverse Integer
要求:
按位反转输入的数字
例1: 输入 x = 123, 返回 321
例2: 输入 x = -123, 返回 -321
难度:简单
分析:
对于一般情况,首先保存输入数字的符号,然后每次取输入的末位(x%10)作为输出的高位(result = result*10 + x%10)即可。但
BufferedOutputStream
周凡杨
首先说一下这个大批量,是指有上千万的数据量。
例子:
有一张短信历史表,其数据有上千万条数据,要进行数据备份到文本文件,就是执行如下SQL然后将结果集写入到文件中!
select t.msisd
linux下模拟按键输入和鼠标
被触发
linux
查看/dev/input/eventX是什么类型的事件, cat /proc/bus/input/devices
设备有着自己特殊的按键键码,我需要将一些标准的按键,比如0-9,X-Z等模拟成标准按键,比如KEY_0,KEY-Z等,所以需要用到按键 模拟,具体方法就是操作/dev/input/event1文件,向它写入个input_event结构体就可以模拟按键的输入了。
linux/in
ContentProvider初体验
肆无忌惮_
ContentProvider
ContentProvider在安卓开发中非常重要。与Activity,Service,BroadcastReceiver并称安卓组件四大天王。
在android中的作用是用来对外共享数据。因为安卓程序的数据库文件存放在data/data/packagename里面,这里面的文件默认都是私有的,别的程序无法访问。
如果QQ游戏想访问手机QQ的帐号信息一键登录,那么就需要使用内容提供者COnte
关于Spring MVC项目(maven)中通过fileupload上传文件
843977358
mybatis spring mvc 修改头像 上传文件 upload
Spring MVC 中通过fileupload上传文件,其中项目使用maven管理。
1.上传文件首先需要的是导入相关支持jar包:commons-fileupload.jar,commons-io.jar
因为我是用的maven管理项目,所以要在pom文件中配置(每个人的jar包位置根据实际情况定)
<!-- 文件上传 start by zhangyd-c --&g
使用svnkit api,纯java操作svn,实现svn提交,更新等操作
aigo
svnkit
原文:http://blog.csdn.net/hardwin/article/details/7963318
import java.io.File;
import org.apache.log4j.Logger;
import org.tmatesoft.svn.core.SVNCommitInfo;
import org.tmateso
对比浏览器,casperjs,httpclient的Header信息
alleni123
爬虫 crawler header
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
{
String type=req.getParameter("type");
Enumeration es=re
java.io操作 DataInputStream和DataOutputStream基本数据流
百合不是茶
java 流
1,java中如果不保存整个对象,只保存类中的属性,那么我们可以使用本篇文章中的方法,如果要保存整个对象 先将类实例化 后面的文章将详细写到
2,DataInputStream 是java.io包中一个数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。
车辆保险理赔案例
bijian1013
车险
理赔案例:
一货运车,运输公司为车辆购买了机动车商业险和交强险,也买了安全生产责任险,运输一车烟花爆竹,在行驶途中发生爆炸,出现车毁、货损、司机亡、炸死一路人、炸毁一间民宅等惨剧,针对这几种情况,该如何赔付。
赔付建议和方案:
客户所买交强险在这里不起作用,因为交强险的赔付前提是:“机动车发生道路交通意外事故”;
如果是交通意外事故引发的爆炸,则优先适用交强险条款进行赔付,不足的部分由商业
学习Spring必学的Java基础知识(5)—注解
bijian1013
java spring
文章来源:http://www.iteye.com/topic/1123823,整理在我的博客有两个目的:一个是原文确实很不错,通俗易懂,督促自已将博主的这一系列关于Spring文章都学完;另一个原因是为免原文被博主删除,在此记录,方便以后查找阅读。
有必要对
【Struts2一】Struts2 Hello World
bit1129
Hello world
Struts2 Hello World应用的基本步骤
创建Struts2的Hello World应用,包括如下几步:
1.配置web.xml
2.创建Action
3.创建struts.xml,配置Action
4.启动web server,通过浏览器访问
配置web.xml
<?xml version="1.0" encoding="
【Avro二】Avro RPC框架
bit1129
rpc
1. Avro RPC简介 1.1. RPC
RPC逻辑上分为二层,一是传输层,负责网络通信;二是协议层,将数据按照一定协议格式打包和解包
从序列化方式来看,Apache Thrift 和Google的Protocol Buffers和Avro应该是属于同一个级别的框架,都能跨语言,性能优秀,数据精简,但是Avro的动态模式(不用生成代码,而且性能很好)这个特点让人非常喜欢,比较适合R
lua set get cookie
ronin47
lua cookie
lua:
local access_token = ngx.var.cookie_SGAccessToken
if access_token then
ngx.header["Set-Cookie"] = "SGAccessToken="..access_token.."; path=/;Max-Age=3000"
end
java-打印不大于N的质数
bylijinnan
java
public class PrimeNumber {
/**
* 寻找不大于N的质数
*/
public static void main(String[] args) {
int n=100;
PrimeNumber pn=new PrimeNumber();
pn.printPrimeNumber(n);
System.out.print
Spring源码学习-PropertyPlaceholderHelper
bylijinnan
java spring
今天在看Spring 3.0.0.RELEASE的源码,发现PropertyPlaceholderHelper的一个bug
当时觉得奇怪,上网一搜,果然是个bug,不过早就有人发现了,且已经修复:
详见:
http://forum.spring.io/forum/spring-projects/container/88107-propertyplaceholderhelper-bug
[逻辑与拓扑]布尔逻辑与拓扑结构的结合会产生什么?
comsci
拓扑
如果我们已经在一个工作流的节点中嵌入了可以进行逻辑推理的代码,那么成百上千个这样的节点如果组成一个拓扑网络,而这个网络是可以自动遍历的,非线性的拓扑计算模型和节点内部的布尔逻辑处理的结合,会产生什么样的结果呢?
是否可以形成一种新的模糊语言识别和处理模型呢? 大家有兴趣可以试试,用软件搞这些有个好处,就是花钱比较少,就算不成
ITEYE 都换百度推广了
cuisuqiang
Google AdSense 百度推广 广告 外快
以前ITEYE的广告都是谷歌的Google AdSense,现在都换成百度推广了。
为什么个人博客设置里面还是Google AdSense呢?
都知道Google AdSense不好申请,这在ITEYE上也不是讨论了一两天了,强烈建议ITEYE换掉Google AdSense。至少,用一个好申请的吧。
什么时候能从ITEYE上来点外快,哪怕少点
新浪微博技术架构分析
dalan_123
新浪微博 架构
新浪微博在短短一年时间内从零发展到五千万用户,我们的基层架构也发展了几个版本。第一版就是是非常快的,我们可以非常快的实现我们的模块。我们看一下技术特点,微博这个产品从架构上来分析,它需要解决的是发表和订阅的问题。我们第一版采用的是推的消息模式,假如说我们一个明星用户他有10万个粉丝,那就是说用户发表一条微博的时候,我们把这个微博消息攒成10万份,这样就是很简单了,第一版的架构实际上就是这两行字。第
玩转ARP攻击
dcj3sjt126com
r
我写这片文章只是想让你明白深刻理解某一协议的好处。高手免看。如果有人利用这片文章所做的一切事情,盖不负责。 网上关于ARP的资料已经很多了,就不用我都说了。 用某一位高手的话来说,“我们能做的事情很多,唯一受限制的是我们的创造力和想象力”。 ARP也是如此。 以下讨论的机子有 一个要攻击的机子:10.5.4.178 硬件地址:52:54:4C:98
PHP编码规范
dcj3sjt126com
编码规范
一、文件格式
1. 对于只含有 php 代码的文件,我们将在文件结尾处忽略掉 "?>" 。这是为了防止多余的空格或者其它字符影响到代码。例如:<?php$foo = 'foo';2. 缩进应该能够反映出代码的逻辑结果,尽量使用四个空格,禁止使用制表符TAB,因为这样能够保证有跨客户端编程器软件的灵活性。例
linux 脱机管理(nohup)
eksliang
linux nohup nohup
脱机管理 nohup
转载请出自出处:http://eksliang.iteye.com/blog/2166699
nohup可以让你在脱机或者注销系统后,还能够让工作继续进行。他的语法如下
nohup [命令与参数] --在终端机前台工作
nohup [命令与参数] & --在终端机后台工作
但是这个命令需要注意的是,nohup并不支持bash的内置命令,所
BusinessObjects Enterprise Java SDK
greemranqq
java BO SAP Crystal Reports
最近项目用到oracle_ADF 从SAP/BO 上调用 水晶报表,资料比较少,我做一个简单的分享,给和我一样的新手 提供更多的便利。
首先,我是尝试用JAVA JSP 去访问的。
官方API:http://devlibrary.businessobjects.com/BusinessObjectsxi/en/en/BOE_SDK/boesdk_ja
系统负载剧变下的管控策略
iamzhongyong
高并发
假如目前的系统有100台机器,能够支撑每天1亿的点击量(这个就简单比喻一下),然后系统流量剧变了要,我如何应对,系统有那些策略可以处理,这里总结了一下之前的一些做法。
1、水平扩展
这个最容易理解,加机器,这样的话对于系统刚刚开始的伸缩性设计要求比较高,能够非常灵活的添加机器,来应对流量的变化。
2、系统分组
假如系统服务的业务不同,有优先级高的,有优先级低的,那就让不同的业务调用提前分组
BitTorrent DHT 协议中文翻译
justjavac
bit
前言
做了一个磁力链接和BT种子的搜索引擎 {Magnet & Torrent},因此把 DHT 协议重新看了一遍。
BEP: 5Title: DHT ProtocolVersion: 3dec52cb3ae103ce22358e3894b31cad47a6f22bLast-Modified: Tue Apr 2 16:51:45 2013 -070
Ubuntu下Java环境的搭建
macroli
java 工作 ubuntu
配置命令:
$sudo apt-get install ubuntu-restricted-extras
再运行如下命令:
$sudo apt-get install sun-java6-jdk
待安装完毕后选择默认Java.
$sudo update- alternatives --config java
安装过程提示选择,输入“2”即可,然后按回车键确定。
js字符串转日期(兼容IE所有版本)
qiaolevip
TO Date String IE
/**
* 字符串转时间(yyyy-MM-dd HH:mm:ss)
* result (分钟)
*/
stringToDate : function(fDate){
var fullDate = fDate.split(" ")[0].split("-");
var fullTime = fDate.split("
【数据挖掘学习】关联规则算法Apriori的学习与SQL简单实现购物篮分析
superlxw1234
sql 数据挖掘 关联规则
关联规则挖掘用于寻找给定数据集中项之间的有趣的关联或相关关系。
关联规则揭示了数据项间的未知的依赖关系,根据所挖掘的关联关系,可以从一个数据对象的信息来推断另一个数据对象的信息。
例如购物篮分析。牛奶 ⇒ 面包 [支持度:3%,置信度:40%] 支持度3%:意味3%顾客同时购买牛奶和面包。 置信度40%:意味购买牛奶的顾客40%也购买面包。 规则的支持度和置信度是两个规则兴
Spring 5.0 的系统需求,期待你的反馈
wiselyman
spring
Spring 5.0将在2016年发布。Spring5.0将支持JDK 9。
Spring 5.0的特性计划还在工作中,请保持关注,所以作者希望从使用者得到关于Spring 5.0系统需求方面的反馈。