param

多线程爬取与存储基础

痞子三分冷 提交于 2020-03-04 10:37:22
多线程: 一般的python程序都是前台运行(主线程),即代表了顺序运行只有前面一个运行完毕后才能运行后面一个,但这样有时候会很浪费时间,比如下载两个数据第一个数据单独下载耗时t1而第二个单独下载耗时t2,时间是t1+t2,但是你将这个两个程序放入后台同时运行则时间时max(t1,t2),这似乎没什么但是数据一多优势就体现出来了 首先导入threading库 import threading xxx.threading.Thread(target=yyy,args=) 创造一个以yyy函数为后台运行的名字叫xxx的线程,args是yyy函数的传入参数 xxx.start()启动这个名字叫xxx的线程 xxx.join()堵塞这个线程:等这个线程执行完毕在进行下一个语句 一些存储与读取: 先介绍os库的两个函数 os.path.exsist(path) : 判断path路径是否存在返回bool值 xxx=os.getcwd() : 获得当前工作目录的绝对地址 写入文本(字符串)代码|脚本    import threading import os def write_file(path,data): ''' :param path: 要写入文件的路径 :param data:要写入文件的数据 :return: ''' f = open(path, 'wb') f.write(data

10个非常实用的工具函数

隐身守侯 提交于 2020-03-04 00:00:00
生成一周时间 new Array 创建的数组只是添加了 length 属性,并没有实际的内容。通过扩展后,变为可用数组用于循环 function getWeekTime(){ return [...new Array(7)].map((j,i)=> new Date(Date.now()+i*8.64e7).toLocaleDateString()) } 使用 getWeekTime() // ["2020/2/26", "2020/2/27", "2020/2/28", "2020/2/29", "2020/3/1", "2020/3/2", "2020/3/3"] 类型判断 判断核心使用 Object.prototype.toString ,这种方式可以准确的判断数据类型。 /** * @param {any} target * @param {string} type * @return {boolean} */ function isType(target, type) { let targetType = Object.prototype.toString.call(target).slice(8, -1).toLowerCase() return targetType === type.toLowerCase() } 使用 isType([], 'Array') //

使用虚拟MVC请求进行单元测试Controller层方法

本小妞迷上赌 提交于 2020-03-03 11:54:53
应用场景:表现层代码在测试时,需要部署服务器,启动服务器测试,对于频繁的测试,由于服务器启动缓慢,测试起来很不方便。 spring-test提供了虚拟mvc请求,可以模拟请求进行测试 需要jar包:spring-test.jar @ContextConfiguration ( locations = { "classpath:applicationContext.xml" , "classpath:springmvc.xml" } ) @WebAppConfiguration //此注解为WebApplicationContext从springmvc IOC中取出赋值 @RunWith ( SpringJUnit4ClassRunner . class ) public class UserMVCTest { @Autowired private WebApplicationContext context ; //虚拟mvc请求 private MockMvc mockMvc ; //初始化mockMvc @Before public void initMockMvc ( ) { mockMvc = MockMvcBuilders . webAppContextSetup ( context ) . build ( ) ; } @Test public void

定时任务quartz

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-03 11:10:30
原文: https://www.cnblogs.com/rinack/p/7815272.html package com.common.util; import org.quartz.CronScheduleBuilder; import org.quartz.CronTrigger; import org.quartz.Job; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.JobKey; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.TriggerKey; import org.quartz.impl.StdSchedulerFactory; /** * * @Description * @author qgw * 2016 上午10:05:59 ^_^ */ public class QuartzManager { private static

Farseer.net轻量级开源框架 入门篇:分类逻辑层

守給你的承諾、 提交于 2020-03-03 00:22:04
导航 目 录: Farseer.net轻量级开源框架 目录 上一篇: Farseer.net轻量级开源框架 入门篇: 缓存逻辑层 下一篇: Farseer.net轻量级开源框架 入门篇: 添加数据详解 分类逻辑层 分类逻辑层,主要用在一些需要支持无限递归的树数据。树数据是:必须有一个根节点,根节点有无限个子节点,没有节点限制。比如我们常用的有:(频道、xxx分类) 这里与BaseCacheModel的操作是完全一致。唯一不同的是,BaseCateModel是继承自ModelCateInfo。这个类提供了默认的几个字段: 1 /// <summary> 2 /// 分类基类 3 /// </summary> 4 public class ModelCateInfo : ModelInfo 5 { 6 /// <summary> 7 /// 所属ID 8 /// </summary> 9 [Display(Name = "所属分类")] 10 public virtual int? ParentID { get; set; } 11 12 /// <summary> 13 /// 标题 14 /// </summary> 15 [Display(Name = "标题"), StringLength(50), Required] 16 public virtual string

Android Hook工具Cydia Substrate使用

别等时光非礼了梦想. 提交于 2020-03-02 19:37:38
Hook简介: Hook就是钩子,在安卓中,就是在事件传送到终点前截获并监控事件的传输,像个钩子勾上事件一样,并且能够在勾上事件时,处理一些自己特定的事件。 Cydia Substrate的官网定义:The powerful code modification platform behind Cydia. Cydia Substrate是一个代码修改平台,它可以修改任何主进程的代码,不管是用Java还是C/C++(native代码)编写的。 注:Cydia Substrate框架对于inline Hook的操作目前还是存在一些bug,使用的时候可能会出现崩溃的现象,部分使用了国内定制的ROM的设备在使用Cydia Substrate框架时会造成设备无法重新启动或无法Hook的现象。 使用Cydia Substrate的步骤: 第一步: 安装Cydia Substrate框架Android本地服务 首先就是在Android设备中安装Cydia Substrate框架的本地服务应用substrate.apk 然后,需要"Link Substrate Files"(连接本地的Substrate服务文件),这一步是需要Root权限的,连接后还需要重启设备才能够生效。 第二步: 下载使用Cydia Substrate库(直接去官网下载)。下载完成后,将得到的所有文件(很多的jar包与so库)

java 不同时间格式转化

北慕城南 提交于 2020-03-02 04:55:01
今天项目中遇到一个格式问题,收到的timestamp格式是2019-08-19-16:03:21 , 但是入es时,当类型为date的时候,这种格式直接报错,因为索引建的格式是yyyy-MM-dd HH:mm:ss,即中间多了一个横杠。 解决思路,先把时间转化成Date类型,然后再把Date转成字符串的类型。 String --> Date /** * @Title: 字符串转日期 * @MethodName: parse * @Description: * @param @param strDate * @param @param pattern * @param @return * @return Date * @throws */ public static Date parse(String strDate, String pattern) { SimpleDateFormat df = new SimpleDateFormat(pattern); try { return df.parse(strDate); } catch (ParseException e) { e.printStackTrace(); return null; } } View Code Date --> String /** * @Title: 日期格式化 * @MethodName:

C#实现汉字转拼音

心不动则不痛 提交于 2020-03-02 04:50:05
实现了取汉字文本首字母、文本对应拼音、以及获取和拼音对应的汉字列表等方法。由于汉字字库大,且多音字较多,因此本组中实现的拼音转换不一定和词语中的字的正确读音完全吻合。但绝大部分是正确的。如有遗漏可以在开发中加入。首先,我将汉字按拼音分组后建立一个字符串数组,然后使用程序将每一个汉字通过其编码值使用散列函数。其中, pos(x)为字符x所属字符串所在的PyCode.codes的数组下标, 然后散列到同PyCode.codes长度相同长度的一个散列表中PyHash.hashes)。 当检索一个汉字的拼音时,首先从PyHash.hashes中获取和对应的PyCode.codes中数组下标,然后从对应字符串查找,当到要查找的字符时,字符 串的前6个字符即包含了该字的拼音。 此种方法的好处一是节约了存储空间,二是兼顾了查询效率 using System; using System.Collections.Generic; using System.Text; namespace NPinyin { internal class PyCode { internal static string[] codes = new string[]{ "a :阿啊吖嗄腌锕", "ai :爱埃碍矮挨唉哎哀皑癌蔼艾隘捱嗳嗌嫒瑷暧砹锿霭", "an :安按暗岸案俺氨胺鞍谙埯揞犴庵桉铵鹌黯", "ang :昂肮盎

DNTRequest 基本方法

﹥>﹥吖頭↗ 提交于 2020-03-01 17:51:59
using System; using System.Web; namespace HuoLi.Common { /// <summary> /// DNTRequest 的摘要说明。 /// </summary> public class DNTRequest { public DNTRequest() { // // TODO: 在此处添加构造函数逻辑 // } /// <summary> /// 判断当前页面是否接收到了Post请求 /// </summary> /// <returns>是否接收到了Post请求</returns> public static bool IsPost() { return HttpContext.Current.Request.HttpMethod.Equals("POST"); } /// <summary> /// 判断当前页面是否接收到了Get请求 /// </summary> /// <returns>是否接收到了Get请求</returns> public static bool IsGet() { return HttpContext.Current.Request.HttpMethod.Equals("GET"); } /// <summary> /// 返回指定的服务器变量信息 /// </summary> ///