自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 收藏
  • 关注

原创 Ubuntu 安装FFmpeg 5.x 版本

在无法直接通过命令安装FFmpeg时, 如何编译安装

2023-03-30 15:29:48 452

原创 CLUSTERDOWN The cluster is down 的解决办法

在本机上单机创建redis cluster执行命令报错 (error) CLUSTERDOWN The cluster is downredis-cli --cluster check 127.0.0.1:6379给出问题原因 not all 16384 slots are covered by nodes因此是部分slot分配的节点已经挂掉了输入命令 redis-cli --cluster fix 127.0.0.1:6379问题解决...

2021-02-25 10:33:05 13068 4

原创 【golang】go 使用sarama写入kafka数据时间戳问题

查看消息时间戳的命令:kafka-console-consumer --bootstrap-server localhost:9092 --property print.timestamp=true --topic test --from-beginning发现sarama生产者推送到kafka的CreateTime均为-1。而命令行推送到kafka的时间戳正常。原因:sarama默认支持的是0.8.2的kafka版本,而timestamp的支持是从0.10版本开始的。因此需要初始化生产者配置时指

2020-09-18 14:07:38 884

原创 Scrapy logging日志重复输出的解决方法

如果是完全在scrapy流程中的日志,一般有三种输出方式。from scrapy.log import loggerlogger.info("info")# 会抛出warning,警告scrapy.log已经被废弃,此时的logger为 scrapy.log# ScrapyDeprecationWarning: Module `scrapy.log` has been depreca...

2020-04-08 19:08:18 1723 6

原创 【爬虫】Python http.client能拿到数据而requests状态码异常

遇到一个case,抓包之后丢进postman无法正常拿到数据,使用curl和requests时也无法正常取到数据。而java,go,python的http.client库可以正常取到数据。当url和headers相同时,不同库的请求拿到结果不同。对requests和http.client请求抓包进行对比。headers一个个看过去发现requests多了一个accept请求头,那accept请求...

2020-03-18 10:23:39 632

原创 python sorted函数自定义排序

一般使用sorted函数的时候,直接会将key设置为一个lambda表达式的匿名函数。这样一般可以直接对字典的key或者value进行排序。但是今天刷leetcode的时候,需要对字典value的数组进行逐一排序,当value一致时,按key的字母顺序排序。这时候就需要自定义比较方法了。通过functools中的com_to_key将一个函数转变为参数key的值。https://leetco...

2020-03-01 15:14:14 1482

原创 scrapy请求头首字母大写的解决方法

背景:同样的url, headers, payload进行post请求,requests可以正确的拿到数据,而scrapy则无法通过验证。通过抓包发现,scrapy所发出的请求头首字母均为大写,在postman中将请求头的各个key改为小写后能正确拿到请求数据。原因:scrapy的Request对象通过传入的headers字典初始化了一个scrapy.http.Headers对象,Head...

2020-01-09 12:01:58 1376 1

原创 uiautomatorviewer报错:java.lang.reflect.InvocationTargetException

在使用uiautomatorviewer对设备进行截屏时,出现异常Unexpected error while obtaining UI hierarchy java.lang.reflect.InvocationTargetException解决方法:通过android studio对sdk tool进行了更新,从25.x 升级到了26.1.1升级后sdk manager没有界面了,ui...

2019-12-16 20:50:02 1884

原创 在linux服务器上搭建mitmproxy

pip install mitmproxymitmdump --listen-host 0.0.0.0 -p 5555如果服务器与手机不在同一局域网,确定手机能连通服务器的情况下,启动mitmproxy时增加–set block_global=false...

2019-12-14 16:58:17 1033

原创 Python过滤字符串中的unicode乱码

最近获取到的字符串里除了正常的汉字字符外,有一些unicode的乱码在里面显示异常。 我是憨憨因此想要过滤掉这些显示异常的字符。str = eval(str.__repr__())可以通过repr获取raw string,进行正则匹配替换。这样就将字符串中的乱码unicode过滤掉啦!~...

2019-08-01 20:16:37 6905

原创 brew cask install java8 失败

用网上看到的命令,结果brew cask 找不到指定版本brew tap caskroom/versionsbrew cask install java8Error: Cask ‘java8’ is unavailable: No Cask with this name exists.搜到一条命令brew cask install adoptopenjdk8下载结束后java -ve...

2019-05-25 10:28:58 9168

原创 (六)Scrapy的抓取流程——Downloader

当通过Scheduler取出一条request之后,engine就会调用_download方法进行对这条request的下载。图中downloader的fetch方法就是下载器对request的操作方法。通过DownloaderMiddlewareManager在download方法中定义了process_request, process_response, process_excepti...

2019-04-26 19:44:23 405

原创 【Pyppeteer】ConnectionError:Connection is closed解决办法

想着用Pyppeteer写一个渲染web页面的接口,测试的时候发现过不了多久。常驻的browser在newPage()创建的时候就会报错。一直提示Connection is closed。这种情况应该也适于其他连接异常的情况。出现这种情况的原因是建立连接是通过websocket库,而websocket连接默认过期时间是20s,所以经过20s后连接断开也就无法控制浏览器了。解决方法:在...

2019-04-18 15:04:29 9228

原创 inode使用率过高的解决方法

周末因为一个鸟程序的日志每条都疯狂输出到一个文件,直接把inode塞满了。记一下排查方法和删除大量文件所做的一些措施。问题排查for i in /*; do echo $i; find $i | wc -l; done首先使用上面的这条命令一步步缩小范围,确定在哪个目录下inode的节点数过多异常。最后我锁定到了日志目录,可是里面只有几个日志文件,在目录下直接运行这条命令也只能看到可...

2019-04-15 10:37:13 9667

原创 (五)Scrapy的抓取流程——Scheduler

在Engine中,是通过Engine实例化的slot对象进行对scheduler对象的初始化,和任务状态的记录。# engine.py中ExecutionEngine的crawl方法def crawl(self, request, spider): assert spider in self.open_spiders, \ "Spider %r not opened w...

2019-04-11 20:04:33 2629

原创 (四)Scrapy的抓取流程——Engine

上一篇提到在Crawler的crawl方法中,启动了Engine。而如Scrapy流程图中描述的,抓取的流程由Engine主导完成。engine是ExecutionEngine的实例,初始化时会初始化诸如scheduler、downloader、scraper(itempipeline和spidermiddleware这一块)等属性。engine.py所在的目录,抓取流程中的主要模块。E...

2019-04-10 20:41:27 965

原创 (三)Scrapy的抓取流程——CrawlerProcess

上一章提到scrapy的启动是通过ScrapyCommand对象中的crawler_process实现的,crawler_process是通过crawler.py下的CrawlerProcess类创建的实例。该文件下定义了Crawler,CrawlerProcess和CrawlerRunner三个类。CrawlerProcess是CrawlerRunner的子类,而命令文件中的self.craw...

2019-04-09 20:25:33 5613

原创 (二)Scrapy的初始化

初始化一个scrapy项目时往往是通过startproject 和 genspider两个命令。了解scrapy进行命令输入时的逻辑是怎样实现的之后,我们可以看看commands文件夹下这两个命令是如何运行的。(1) startproject当我们新建一个项目时通过scrapy startproject <project_name> [project_dir] 命令实现。输入...

2019-04-03 21:07:29 1236

原创 (一)Scrapy的命令行

最近一直都是在用自己写的抓取框架做爬虫,还是系统的整理一下Scrapy相关的知识,做一个old school 的爬虫。爬虫的整个流程,就是发送网络请求,处理返回的内容两个过程。然后我们将这个流程细化;如何准备需要访问的链接,需要访问的链接应该是哪些链接;发送请求时我们带上什么,如何更快的发送更多请求;对返回的内容需要做哪些操作……不讲实例,只看实现。从Scrapy的源码来读Scrapy到底是如...

2019-04-02 20:12:36 5960

原创 Python装饰器之lru_cache

在流畅的Python里看到的,做一下笔记。在运行一些比较耗时的函数,如递归时重复计算相同参数的函数时。通过python自带的装饰器functools.lru_cache可以将函数结果保存起来,作为缓存在重复计算时直接返回结果。减少函数运行的时间。以斐波那契数列的递归为例,首先实现一个递归的斐波那契方法:def fib(n): if n < 2: return n...

2019-03-20 19:46:42 648

原创 Python的增量赋值

对于python来说,a=a+b 和a+=b的区别是什么。增量赋值运算符+=和*=的表现取决于第一个操作对象。实际上会调用对象的__iadd__和__imul__方法,当该方法未实现的时候会调用__add__和__mul__方法。而对于可变对象一般都实现了__iadd__和__imul__方法。所以对于不可变对象来说两种方式并没有区别,而可变对象的增量赋值则会在原地进行操作,因此图中的数组的内...

2019-03-19 17:19:14 963

原创 【爬虫】一道爬虫面试题

最近在群里看到老哥提到这题面试题,刚好有关js的混淆。自己撸一下思路怎么做。http://shaoq.com:7777/exam这里第一行的字除了python和题都是由css给span标签设置的style。直接对这个地址进行访问的话,返回的内容只是设置了5.5秒后进行了一次地址的重定向。并对cookie进行了一次设置所以可以通过session保存cookie后重复访问这一链接,但是...

2019-03-14 15:44:25 1165

原创 Python日志分级别输出到不同文件

思路:为logger设置2个handler,再对2个handler设置不同的filter进行日志过滤。通过supervisor管理项目时,会有stdout和stderr两种日志路径的设置方式,通过给一个logger设置2个StreamHandler后,分别对handler设置日志级别的过滤,实现日志的分级输出。import loggingimport syslog = logging.g...

2019-03-08 19:25:51 7506 1

原创 【supervisor】启动时报错Error: Another program is already listening on a port...

当启动supervisor时报错$ supervisord -c supervisord.confError: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before startin...

2019-02-27 16:44:57 2976

原创 【Redis】Redis持久化的两种方式

redis的两种持久化方式,快照和只追加文件(aof),快照保存数据,AOF保存每次执行的命令。配置文件中的dir 选项指定了快照文件和aof文件的保存位置。【快照】快照持久化的命令:bgsave和save,通过save命令执行时不会创建子线程争抢资源。配置文件:save 60 1000 #60s内1000次操作触发快照保存stop-writes-on-bgsave-error no...

2019-02-20 14:52:32 163

原创 【leetcode】662.二叉树最大宽度

https://leetcode-cn.com/problems/maximum-width-of-binary-tree/求一颗二叉树的最大宽度最开始用层级遍历的方式,记录一层的长度,将空节点的也放入队列中计算宽度,当二叉树过大时,会超出时间限制。原代码: def widthOfBinaryTree(self, root): &quot;&quot;&quot; :type ro...

2019-02-14 19:07:32 495

原创 Python对序列使用 * 需要注意的地方

以列表为例,在初始化列表的时候我们可以用 * 来复制元素。arr = [0]*3 #此时arr为[0,0,0]arr2 = [[0]]*3 #此时arr2为[[0],[0],[0]]此时arr和arr2中每个元素的内存地址都是相同的,又因为列表为Python中的可变对象。所以对arr2中的一个元素进行list操作时,会影响到其他元素。因此在使用*进行列表的初始化时需要注意列表中...

2019-02-13 10:56:31 307

原创 Python不可变的映射类型MappingProxyType

Python中的字典是可变的,当需要某个映射关系不能被修改时。可以通过MappingProxyType创建不可修改的映射实例。from types import MappingProxyTyped = {'a':1, 'b':2}d_view = MappingProxyType(d)当对d_view的键值进行修改时,会报错。...

2019-01-17 19:25:37 2396

原创 pyenv安装python版本BUILD FAILED

今天在一台服务器上安装python版本时,一直报错BUILD FAILED。这种情况可以下载python安装包后离线运行当pyenv install时会在.pyenv/cache文件夹下查看对应版本的Python安装包是否存在,因此可以按照先前的下载地址在该文件夹下加载好安装包。wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0...

2018-11-28 15:42:40 2945 2

原创 Fiddler抓部分app时网络连接失败

通过fiddler抓app时,在安装手机安装fiddler证书后,发现有的app可以正常联网,有的app连不上网,如知乎、微博。在Options-HTTPS 取消勾选Decrypt HTTPS traffic后一切正常。...

2018-11-08 16:07:16 16679 20

原创 Message: 'chromedriver' executable needs to be in PATH的处理

下载与chrome对应版本的chromedriver,解压后放入chrome的文件夹下,并将该路径添加到环境变量。如:C:\Program Files (x86)\Google\Chrome\Application下载地址添加环境变量后仍然没有用的情况下,将chromedriver 放入python解释器目录下。如虚拟环境下的venv/Scripts...

2018-10-26 16:29:12 439

原创 Python使用opencv 时 ImportError: DLL load failed: 找不到指定的模块

开发环境 windows7 + python3.6在安装opencv-python后导入cv2时报错ImportError: DLL load failed: 找不到指定的模块。网上的教程有下载Visual C++ Redistributable for Visual Studio 2015解决,有将python3.dll放入文件夹下解决,也有通过wheel文件进行下载的。尝试了这些方法后都...

2018-10-17 12:11:58 3109 1

原创 python简单的异步编程 concurrent.futures

concurrent.futures 简单的异步编程 自从知道了这个,已经忘了threading,multiprocessing怎么用。文档:https://pythonhosted.org/futures/简单的用法,首先Executor作为抽象类,而ThreadPoolExecutor和ProcessPoolExecutor为它的子类分别用来创建线程池和进程池。Executor三...

2018-09-06 12:47:36 455

原创 使用DataX进行数据同步

DataX 是一个异构数据源离线同步工具,可以实现数据源之间的数据同步。 ODPSWriter插件适合于TB,GB数量级的数据传输,如果需要传输PB量级的数据,可以选择dt task工具 ;工具下载下载DataX wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz解压DataX tar ...

2018-07-17 18:30:26 8443

原创 Pandas修改csv文件某一列的值

将本来存为 省名 城市名 的字段修改为只有城市名 1. 通过pandas读取csv文件 2. 获取某一列的值并进行类型转换 3. 通过apply方法中的匿名函数进行数据的处理 4. 输出到原始文件中import pandas as pddata = pd.read_csv('price.csv',encoding='utf-8', )data[u...

2018-07-11 16:52:27 50760 5

原创 zlib和gzip的压缩比较

背景:压缩网页html文档并存储,压缩后能够减少数据库的负担思路:使用python自带的zlib或gzip进行字符串内容的压缩使用:压缩等级越高,所用时间越长1. zlib(默认压缩等级为6)@time_countdef zlib_compress(): res = zlib.compress(html.encode()) print('zlib压缩后%d' %...

2018-06-26 12:07:40 14369 3

原创 python selenium带插件启动

from selenium import webdriveroptions = webdriver.ChromeOptions()options.add_extension(&quot;xxx.crx&quot;)browser = webdriver.Chrome(chrome_options=options)

2018-06-20 15:37:41 3193

原创 Centos7 Flask+gunicorn+nginx+supervisor 简单配置

Nginx 监听的端口收到来自客户端的请求,根据配置文件转发给WSGI WSGI调用flask框架生成对应路由的html,发送给Nginx Nginx将响应发送给客户端【Nginx】 1.安装 yum install nginx2.修改配置文件server { listen 80; server_name _; # 外部地址 ...

2018-06-13 11:40:09 592

原创 pymysql.err.InterfaceError: (0, '')解决办法

背景在使用手机模拟器抓取数据时,通过mitmproxy进行返回数据的解析存储。 因为不清楚mitmproxy在设置脚本后是一次开启还是每次请求都会运行一次,所以在脚本里直接开启了数据库连接并没有关闭。 写好脚本后,在爬取过程中,时间过久后会报错pymysql.err.InterfaceError: (0, ”) 在response方法里关闭数据库也没有什么用,甚至存不进数据库。解决...

2018-06-08 09:54:42 28983

原创 xpath中匹配正则表达式

etree = lxml.html.fromstring(html) ns = {“re”: “http://exslt.org/regular-expressions“} etree.xpath(“//div[re:match(@class,’&lt;正则表达式&gt;’)]”, namespace=ns) 用正则表达式匹配有规律的某种属性...

2018-05-29 18:16:05 20453 9

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除