轻报APP --骗子请注意点

闲聊李魔佛 发表了文章 • 0 个评论 • 23 次浏览 • 2021-04-15 19:34 • 来自相关话题

所谓的垃圾创业公司,什么业务都不想出钱,能省就剩,抠到极致,能骗的绝对不花钱。
 
第一次见这种公司。
 
事情缘由:
 
该公司在拉勾上以招聘兼职为由,加你微信,然后借口说已测试一下应聘者的的水平,要求对方写一个爬取一个他们想要爬的网站,而且是用一个第三方的网站 神箭手 的平台代码来写的。 意味着,他可以拿着你的代码直接在上面运行,爬取他们想要的数据。
 
因为他们要的网站我曾经爬过,我直接把数据接了图给他们。 他们就急着要我用神箭手重新写一次。这时我就妥妥地确定他们就是想要空手白狼的人。 然后就拉黑了哦。
 
注意,那个负责人叫王锦锋。 查看全部
所谓的垃圾创业公司,什么业务都不想出钱,能省就剩,抠到极致,能骗的绝对不花钱。
 
第一次见这种公司。
 
事情缘由:
 
该公司在拉勾上以招聘兼职为由,加你微信,然后借口说已测试一下应聘者的的水平,要求对方写一个爬取一个他们想要爬的网站,而且是用一个第三方的网站 神箭手 的平台代码来写的。 意味着,他可以拿着你的代码直接在上面运行,爬取他们想要的数据。
 
因为他们要的网站我曾经爬过,我直接把数据接了图给他们。 他们就急着要我用神箭手重新写一次。这时我就妥妥地确定他们就是想要空手白狼的人。 然后就拉黑了哦。
 
注意,那个负责人叫王锦锋。

本地代码 搜索脚本 python实现

python李魔佛 发表了文章 • 0 个评论 • 28 次浏览 • 2021-04-14 19:34 • 来自相关话题

本来用find+grep可以搞定的,不过如果搜索多个路径和多个规则,写正则可能写过不来
find . -type f -name "*.py" | xargs grep "redis"
上面语句是在py文件中查找redis的字符。
 
 不过如果要在指定多个位置查找,可能要拼接几个管道,并且如果我要几个字符的关系是并集,就是多个关键字要在文本中同时出现,而且不一定在同一行,所以也不好写。
 
所以写了个python脚本,也方便在centos下运行
# -*- coding: utf-8 -*-
# @Time : 2021/4/14 1:46
# @File : search_string_in_folder.py
# @Author : Rocky C@www.30daydo.com

'''
搜索代码脚本
'''
import fire
import glob
import re

# TODO 用PYQT重写一个

PATH_LIST = [r'C:\git\\',r'C:\OtherGit\\',r'C:\OneDrive\viewed_code\\']
POST_FIX = 'py' # 后缀文件
# 关键词
WORDS=[]

EXCLUDE_PATH=[r'C:\OtherGit\cpython']

DEBUG = True

class FileSearcher:

def __init__(self,kw):
self.root_path_list = PATH_LIST
self.default_coding ='utf-8'
self.exception_handle_coding='gbk'
self.kw=[]
if not isinstance(kw,tuple):
kw=(kw,)

for k in kw:
k=k.strip()
self.kw.append(k)

def search(self,file,encoding):
match_dict = dict()

for w in self.kw:
match_dict.setdefault(w, False)

line_number = 0
line_list=list()
with open(file, 'r', encoding=encoding) as fp:

while 1:
try:
line = fp.readline()

except UnicodeDecodeError as e:

if DEBUG:
print(f'Error coding in file {file}')
print(e)

return None,None,None

except Exception as e:
if DEBUG:
print(f'Error in file {file}')
print(e)
break

if not line:
break

line = line.strip()
if not line:
continue

for w in self.kw:
m=re.search(w,line,re.IGNORECASE)
if m:
match_dict.update({w:True})
line_list.append(line_number)

line_number+=1

return True,match_dict.copy(),line_list.copy()

def print_match_result(self,file,line_list,encoding):

with open(file, 'r', encoding=encoding) as fp:
line_number = 0
while 1:
try:
line = fp.readline()
except Exception as e:
if DEBUG:
print(f'Error in file {file}')
print(e)
break

if not line:
break
line=line.strip()

if not line:
continue

if line_number in line_list:
print(f'{file} :: {line_number} ====>\n {line[:50]}\n')

line_number += 1

def run(self):
for path in self.root_path_list:

search_path=path+'**/*.'+POST_FIX

for file in glob.iglob(search_path,recursive=True):

for ex_path in EXCLUDE_PATH:
ex_path=ex_path.replace('\\','')
temp_file=file.replace('\\','')
if ex_path in temp_file:
continue

use_encoding=self.default_coding
encode_proper,match_dict,line_list=self.search(file,use_encoding)

if not encode_proper:
use_encoding = self.exception_handle_coding
encode_proper,match_dict,line_list=self.search(file, use_encoding)

if match_dict is not None and len(match_dict)>0 and all(match_dict.values()):
# print(match_dict.values())
self.print_match_result(file,line_list,use_encoding)
# print(line_list)


def test_error_file():
path=r'C:\git\CodePool\example-code\19-dyn-attr-prop\oscon\schedule2.py'
with open(path,'r',encoding='utf8') as fp:
while 1:
x=fp.readline()
if not x:
break
print(x)

def main(kw):
app = FileSearcher(kw)
app.run()

if __name__ == '__main__':
fire.Fire(main)

运行: python main.py --kw=asyncio,gather
 





  查看全部
本来用find+grep可以搞定的,不过如果搜索多个路径和多个规则,写正则可能写过不来
find . -type f -name "*.py" | xargs grep "redis"

上面语句是在py文件中查找redis的字符。
 
 不过如果要在指定多个位置查找,可能要拼接几个管道,并且如果我要几个字符的关系是并集,就是多个关键字要在文本中同时出现,而且不一定在同一行,所以也不好写。
 
所以写了个python脚本,也方便在centos下运行
# -*- coding: utf-8 -*-
# @Time : 2021/4/14 1:46
# @File : search_string_in_folder.py
# @Author : Rocky C@www.30daydo.com

'''
搜索代码脚本
'''
import fire
import glob
import re

# TODO 用PYQT重写一个

PATH_LIST = [r'C:\git\\',r'C:\OtherGit\\',r'C:\OneDrive\viewed_code\\']
POST_FIX = 'py' # 后缀文件
# 关键词
WORDS=[]

EXCLUDE_PATH=[r'C:\OtherGit\cpython']

DEBUG = True

class FileSearcher:

def __init__(self,kw):
self.root_path_list = PATH_LIST
self.default_coding ='utf-8'
self.exception_handle_coding='gbk'
self.kw=[]
if not isinstance(kw,tuple):
kw=(kw,)

for k in kw:
k=k.strip()
self.kw.append(k)

def search(self,file,encoding):
match_dict = dict()

for w in self.kw:
match_dict.setdefault(w, False)

line_number = 0
line_list=list()
with open(file, 'r', encoding=encoding) as fp:

while 1:
try:
line = fp.readline()

except UnicodeDecodeError as e:

if DEBUG:
print(f'Error coding in file {file}')
print(e)

return None,None,None

except Exception as e:
if DEBUG:
print(f'Error in file {file}')
print(e)
break

if not line:
break

line = line.strip()
if not line:
continue

for w in self.kw:
m=re.search(w,line,re.IGNORECASE)
if m:
match_dict.update({w:True})
line_list.append(line_number)

line_number+=1

return True,match_dict.copy(),line_list.copy()

def print_match_result(self,file,line_list,encoding):

with open(file, 'r', encoding=encoding) as fp:
line_number = 0
while 1:
try:
line = fp.readline()
except Exception as e:
if DEBUG:
print(f'Error in file {file}')
print(e)
break

if not line:
break
line=line.strip()

if not line:
continue

if line_number in line_list:
print(f'{file} :: {line_number} ====>\n {line[:50]}\n')

line_number += 1

def run(self):
for path in self.root_path_list:

search_path=path+'**/*.'+POST_FIX

for file in glob.iglob(search_path,recursive=True):

for ex_path in EXCLUDE_PATH:
ex_path=ex_path.replace('\\','')
temp_file=file.replace('\\','')
if ex_path in temp_file:
continue

use_encoding=self.default_coding
encode_proper,match_dict,line_list=self.search(file,use_encoding)

if not encode_proper:
use_encoding = self.exception_handle_coding
encode_proper,match_dict,line_list=self.search(file, use_encoding)

if match_dict is not None and len(match_dict)>0 and all(match_dict.values()):
# print(match_dict.values())
self.print_match_result(file,line_list,use_encoding)
# print(line_list)


def test_error_file():
path=r'C:\git\CodePool\example-code\19-dyn-attr-prop\oscon\schedule2.py'
with open(path,'r',encoding='utf8') as fp:
while 1:
x=fp.readline()
if not x:
break
print(x)

def main(kw):
app = FileSearcher(kw)
app.run()

if __name__ == '__main__':
fire.Fire(main)

运行: python main.py --kw=asyncio,gather
 

mQm5aIvTh1.png

 

*蓝 灯 * 在目录 AppData\Local\Lantern\replica 下生成的一个巨大数据文件

闲聊李魔佛 发表了文章 • 0 个评论 • 32 次浏览 • 2021-04-13 23:12 • 来自相关话题

在清理磁盘的过程中,发现在C的 AppData下的lantern目录下有个1G多的数据库文件。
AppData\Local\Lantern\replica
storage-cache.db
具体内容不知道是什么。
然后好奇了一下,用进程监控软件监控了一下。
 
发现*蓝*灯*是用golang写的。
 
然后后台不断地跟ask.com 进行通信,估计这个是他们托管的服务器。





 
后台不断地写日志,还有获取某个代理服务器的状态。 查看全部
在清理磁盘的过程中,发现在C的 AppData下的lantern目录下有个1G多的数据库文件。
AppData\Local\Lantern\replica
storage-cache.db
具体内容不知道是什么。
然后好奇了一下,用进程监控软件监控了一下。
 
发现*蓝*灯*是用golang写的。
 
然后后台不断地跟ask.com 进行通信,估计这个是他们托管的服务器。

Procmon64_CaFy6OtMxD.png

 
后台不断地写日志,还有获取某个代理服务器的状态。

万一免五 银河证券 非网红营业部 转债免五低佣金 百万分之五

券商万一免五李魔佛 发表了文章 • 0 个评论 • 100 次浏览 • 2021-04-13 00:51 • 来自相关话题

目前市面上的银河默认不是免五的,需要找到特定的营业部才能开通。
本营业部非网红营业部,可以一加六拖拉机。以防为了套利时出不去哈。
 
费率万一免五,可转债也是免五,沪市费率百万分之五,深市十万分之五。
 
因为经常会被同行举报,所以优惠会不定期关闭,需要的朋友要抓紧时间开,开了以后即使后面银河关闭了免五的通道,后面的费率还是以你现在开的费率来计算,也是免五的。 
 
需要的朋友可以扫描关注: 备注 : 开户,非诚勿扰。 查看全部
目前市面上的银河默认不是免五的,需要找到特定的营业部才能开通。
本营业部非网红营业部,可以一加六拖拉机。以防为了套利时出不去哈。
 
费率万一免五,可转债也是免五,沪市费率百万分之五,深市十万分之五。
 
因为经常会被同行举报,所以优惠会不定期关闭,需要的朋友要抓紧时间开,开了以后即使后面银河关闭了免五的通道,后面的费率还是以你现在开的费率来计算,也是免五的。 
 
需要的朋友可以扫描关注: 备注 : 开户,非诚勿扰。

绿盟下载官网被黑了?

闲聊李魔佛 发表了文章 • 0 个评论 • 46 次浏览 • 2021-04-10 11:47 • 来自相关话题

以前一个不错的绿色软件下载网站。
现在这样子了。





 
不知道是网站换人了还是被黑了?
以前一个不错的绿色软件下载网站。
现在这样子了。

chrome_8aX2qxmeS9.png

 
不知道是网站换人了还是被黑了?

判读一个函数是不是协程

python李魔佛 发表了文章 • 0 个评论 • 47 次浏览 • 2021-04-09 20:27 • 来自相关话题

传入的是函数名,不需要加入括号:
def check_coroutine(fun):
if iscoroutinefunction(fun):
print('是协程')
else:
print('不是协程')

async def visit_web():
browser = await pyppeteer.launch(
{'headless': False,
'userDataDir': UserDataDir,
'defaultViewport': {'width': 1800, 'height': 1000},
'ignoreDefaultArgs':True,
}
)
page = await browser.newPage()

# 可以在launch下配置
# await page.setViewport({
# "width": 1900,
# "height": 1020
# })


# 先执行下面的JS 再去goto
await page.evaluate(
'''() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) }''')
# await page.screenshot({'path': 'test.png', 'fullPage': True})
# await page.pdf({'path': 'test.pdf'})
# await asyncio.sleep(5)

await page.goto(url=URL)

# 这里的js是异步的写法
dimensions = await page.evaluate(
'''
()=>{
return {
width:document.documentElement.clientWidth,
height:document.documentElement.clientHeight,
deviceScaleFactor_:window.devicePixelRatio,
}
}
'''
)

result = await page.evaluate(
'''
()=>{
var title = document.title;
return {title:title};
}
'''

)


await browser.close()

调用:
check_coroutine(visit_web)注意,上面不能用visit_web()

  查看全部
传入的是函数名,不需要加入括号:
def check_coroutine(fun):
if iscoroutinefunction(fun):
print('是协程')
else:
print('不是协程')

async def visit_web():
browser = await pyppeteer.launch(
{'headless': False,
'userDataDir': UserDataDir,
'defaultViewport': {'width': 1800, 'height': 1000},
'ignoreDefaultArgs':True,
}
)
page = await browser.newPage()

# 可以在launch下配置
# await page.setViewport({
# "width": 1900,
# "height": 1020
# })


# 先执行下面的JS 再去goto
await page.evaluate(
'''() =>{ Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) }''')
# await page.screenshot({'path': 'test.png', 'fullPage': True})
# await page.pdf({'path': 'test.pdf'})
# await asyncio.sleep(5)

await page.goto(url=URL)

# 这里的js是异步的写法
dimensions = await page.evaluate(
'''
()=>{
return {
width:document.documentElement.clientWidth,
height:document.documentElement.clientHeight,
deviceScaleFactor_:window.devicePixelRatio,
}
}
'''
)

result = await page.evaluate(
'''
()=>{
var title = document.title;
return {title:title};
}
'''

)


await browser.close()

调用:
check_coroutine(visit_web)
注意,上面不能用visit_web()

 

可转债T+0 零手续费 零费率 免佣金

券商万一免五李魔佛 发表了文章 • 0 个评论 • 75 次浏览 • 2021-04-06 18:26 • 来自相关话题

一般而言,可转债的手续费都会比股票低
 
佣金最低的可以达到沪市百万分之二,也就是买入1百万的可转债,全部费用才2元钱,如果买入1万块,那么手续费才1分钱。 
那么如果你是很抠的人,这里并不是贬义词,在菜市场,你会比较价格,而在证券市场上,为什么不挑选便宜的佣金的券商呢? 而且还有个方法使你下单不用一分钱。
 
看交割单
 

 
券商交割单只是统计到分,也就是一分钱以下是不会收取的,那么买入转债的时候,如果你的交易金额较大,那么可以使用拆单功能,就是把一个大单拆分为多个小单,如果你每个小单小于5千元,那么券商的交割费用系统就会舍弃分钱后面的金额,也就是交易费用原来是 0.003元,但只能取到分钱位置,也就是0.00,后面的3就被舍弃了,这样手续费就是为0了。
 
所以你要做的就是找一个可转债低佣的券商,越低越好,最低的可以到百万分之二,并且没有资金要求,不需要你存个十万八万的。开通即可。
 
需要可以扫描开户:

备注:开户
非诚勿扰。
  查看全部
一般而言,可转债的手续费都会比股票低
 
佣金最低的可以达到沪市百万分之二,也就是买入1百万的可转债,全部费用才2元钱,如果买入1万块,那么手续费才1分钱。 
那么如果你是很抠的人,这里并不是贬义词,在菜市场,你会比较价格,而在证券市场上,为什么不挑选便宜的佣金的券商呢? 而且还有个方法使你下单不用一分钱。
 
看交割单
 

 
券商交割单只是统计到分,也就是一分钱以下是不会收取的,那么买入转债的时候,如果你的交易金额较大,那么可以使用拆单功能,就是把一个大单拆分为多个小单,如果你每个小单小于5千元,那么券商的交割费用系统就会舍弃分钱后面的金额,也就是交易费用原来是 0.003元,但只能取到分钱位置,也就是0.00,后面的3就被舍弃了,这样手续费就是为0了。
 
所以你要做的就是找一个可转债低佣的券商,越低越好,最低的可以到百万分之二,并且没有资金要求,不需要你存个十万八万的。开通即可。
 
需要可以扫描开户:

备注:开户
非诚勿扰。
 

pyppeteer-pdf not support latest version of pypeteer

python爬虫李魔佛 发表了文章 • 0 个评论 • 76 次浏览 • 2021-04-04 18:23 • 来自相关话题

只能用0.0.25版本的pypeteer。
只好下载一个低版本的chrouium放到本地。

或者使用另一个库
https://github.com/shivanshs9/pdfgen-python
 
只能用0.0.25版本的pypeteer。
只好下载一个低版本的chrouium放到本地。

或者使用另一个库
https://github.com/shivanshs9/pdfgen-python
 

pyppeteer禁用自动化提示栏 --enable-automation参数关闭

python爬虫李魔佛 发表了文章 • 0 个评论 • 80 次浏览 • 2021-04-04 14:49 • 来自相关话题

在启动的时候加入一个参数即可: browser = await pyppeteer.launch(
{'headless': False,
'userDataDir': UserDataDir,
'defaultViewport': {'width': 1800, 'height': 1000},
# 'enable-automation':False,
'ignoreDefaultArgs':['--enable-automation'],
}
)
忽略默认参数:
'ignoreDefaultArgs':['--enable-automation'],
即可,
如果需要去除更多的特征,在列表里面加入更多即可。
如果全部不要,那么 就把它设置为True即可。

  查看全部
在启动的时候加入一个参数即可:
    browser = await pyppeteer.launch(
{'headless': False,
'userDataDir': UserDataDir,
'defaultViewport': {'width': 1800, 'height': 1000},
# 'enable-automation':False,
'ignoreDefaultArgs':['--enable-automation'],
}
)

忽略默认参数:
'ignoreDefaultArgs':['--enable-automation'],
即可,
如果需要去除更多的特征,在列表里面加入更多即可。
如果全部不要,那么 就把它设置为True即可。

 

pyppeteer设置浏览器大小

python爬虫李魔佛 发表了文章 • 0 个评论 • 83 次浏览 • 2021-04-04 12:06 • 来自相关话题

在初始化时加入 defaultViewport字典值即可:
browser = await pyppeteer.launch(
{'headless': False,
'userDataDir': UserDataDir,
'defaultViewport': {'width': 1800, 'height': 1000}
}
)
更多参数可以查看pyppeteer的源码。
self.handleSIGINT = options.get('handleSIGINT', True)
self.handleSIGTERM = options.get('handleSIGTERM', True)
self.handleSIGHUP = options.get('handleSIGHUP', True)
self.ignoreHTTPSErrors = options.get('ignoreHTTPSErrors', False)
self.defaultViewport = options.get('defaultViewport', {'width': 800, 'height': 600}) # noqa: E501
self.slowMo = options.get('slowMo', 0)
self.timeout = options.get('timeout', 30000)
self.autoClose = options.get('autoClose', True)

  查看全部
在初始化时加入 defaultViewport字典值即可:
    browser = await pyppeteer.launch(
{'headless': False,
'userDataDir': UserDataDir,
'defaultViewport': {'width': 1800, 'height': 1000}
}
)

更多参数可以查看pyppeteer的源码。
        self.handleSIGINT = options.get('handleSIGINT', True)
self.handleSIGTERM = options.get('handleSIGTERM', True)
self.handleSIGHUP = options.get('handleSIGHUP', True)
self.ignoreHTTPSErrors = options.get('ignoreHTTPSErrors', False)
self.defaultViewport = options.get('defaultViewport', {'width': 800, 'height': 600}) # noqa: E501
self.slowMo = options.get('slowMo', 0)
self.timeout = options.get('timeout', 30000)
self.autoClose = options.get('autoClose', True)

 

python判断可转债是否强赎

量化交易李魔佛 发表了文章 • 0 个评论 • 55 次浏览 • 2021-04-02 13:41 • 来自相关话题

占坑,后期把代码整理下放上来
占坑,后期把代码整理下放上来

可转债开户 免五

券商万一免五李魔佛 发表了文章 • 0 个评论 • 84 次浏览 • 2021-04-02 13:04 • 来自相关话题

可转债的开户条件:
1. 和股票证券一样,需要开通一个证券账户,年满18周岁即可。
2. 开通券商账户后,需要在券商软件的业务里面,选择开通可转债交易权限,会让你做十道题,题目比较简单,做错了也可以重来的。
3. 然后就可以交易可转债了。 可转债是T+0的,也就是可以当天来回买卖。
 
市面上券商可转债的费率参差不齐,笔者这里有一个全市场最低的交易佣金:
沪市百万分之二,深市十万分之四,而且是免5,没有最低消费,也就是你买一百万的可转债,费率是2元,如果是2万块,那么是2分钱,如果是2000元呢,那么就是0.2分。 不过软件里面就四舍五入,就是0元了哈。
 

 
如果有需要,可以扫描下方二维码开户吧: 请注明 开户,不然非诚勿扰:
  查看全部
可转债的开户条件:
1. 和股票证券一样,需要开通一个证券账户,年满18周岁即可。
2. 开通券商账户后,需要在券商软件的业务里面,选择开通可转债交易权限,会让你做十道题,题目比较简单,做错了也可以重来的。
3. 然后就可以交易可转债了。 可转债是T+0的,也就是可以当天来回买卖。
 
市面上券商可转债的费率参差不齐,笔者这里有一个全市场最低的交易佣金:
沪市百万分之二,深市十万分之四,而且是免5,没有最低消费,也就是你买一百万的可转债,费率是2元,如果是2万块,那么是2分钱,如果是2000元呢,那么就是0.2分。 不过软件里面就四舍五入,就是0元了哈。
 

 
如果有需要,可以扫描下方二维码开户吧: 请注明 开户,不然非诚勿扰:
 

可转债市场最低费率是多少

券商万一免五李魔佛 发表了文章 • 0 个评论 • 169 次浏览 • 2021-04-02 11:36 • 来自相关话题

最近不少过来开户的人,都是因为之前很早前开的券商户,比如像华泰这种,在4,5年前开的。
有些人也不怎么看交割单,不看不知道,一看吓一跳。





交易最低1元,也就是如果买1手转债(10张),共1000元,或者中签了,中了一手可转债,也就是1000元,卖出最低给1元。
而费率就是千分之一,也就是交易1万元,要给10元的交易费率。
 
本身可转债是T+0了,每天可以来回做T,费率已经很低的,市场是最低的, 沪市转债费率是百万分之2,是深市的稍微贵一些,十万分之4,并且没有最低消费,也就是你买1千元沪市的可转债,算下来,精确到分得话,是不用钱的(这个只能悄悄的知道就好了,被券商们知道就不高兴了)。
 






具体费率:

如果需要开户的可以扫描以下二维码,保证费率市场最低


备注开户。
 
PS:本人不是券商人员。如果你需要开通其他券商,也可以找我开,我这里有大部分券商的开户资源,也清楚每个品种的费率情况,也希望推荐一个适合的券商给你,免得被手续费吸走你的盈利哈。 查看全部
最近不少过来开户的人,都是因为之前很早前开的券商户,比如像华泰这种,在4,5年前开的。
有些人也不怎么看交割单,不看不知道,一看吓一跳。

华泰费率.PNG

交易最低1元,也就是如果买1手转债(10张),共1000元,或者中签了,中了一手可转债,也就是1000元,卖出最低给1元。
而费率就是千分之一,也就是交易1万元,要给10元的交易费率。
 
本身可转债是T+0了,每天可以来回做T,费率已经很低的,市场是最低的, 沪市转债费率是百万分之2,是深市的稍微贵一些,十万分之4,并且没有最低消费,也就是你买1千元沪市的可转债,算下来,精确到分得话,是不用钱的(这个只能悄悄的知道就好了,被券商们知道就不高兴了)。
 

Screenshot_2021_0402_112915_small.jpg


具体费率:

如果需要开户的可以扫描以下二维码,保证费率市场最低


备注开户。
 
PS:本人不是券商人员。如果你需要开通其他券商,也可以找我开,我这里有大部分券商的开户资源,也清楚每个品种的费率情况,也希望推荐一个适合的券商给你,免得被手续费吸走你的盈利哈。

pyppeteer下载chromedriver失败的解决办法

python爬虫李魔佛 发表了文章 • 0 个评论 • 83 次浏览 • 2021-04-01 00:05 • 来自相关话题

因为网址变了!
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='storage.googleapis.com', port=443): Max retries exceeded with url: /chromium-browser-snapshots/Win_
x64/588429/chrome-win32.zip (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x00000000037D3880>: Failed to establish a new connect
ion: [Errno 11004] getaddrinfo failed'))
用浏览器看了,发现根本打不开。
然后谷歌了一下它的镜像,实际链接为: 
https://commondatastorage.googleapis.com/chromium-browser-snapshots/Win_x64/575458/chrome-win32.zip
 
所以,哎,这个库真的有点烂。
直接下载上面的链接,然后解压到本地路径,然后在设置一个环境变量指向这个目录即可。
  查看全部
因为网址变了!
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='storage.googleapis.com', port=443): Max retries exceeded with url: /chromium-browser-snapshots/Win_
x64/588429/chrome-win32.zip (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x00000000037D3880>: Failed to establish a new connect
ion: [Errno 11004] getaddrinfo failed'))
用浏览器看了,发现根本打不开。
然后谷歌了一下它的镜像,实际链接为: 
https://commondatastorage.googleapis.com/chromium-browser-snapshots/Win_x64/575458/chrome-win32.zip
 
所以,哎,这个库真的有点烂。
直接下载上面的链接,然后解压到本地路径,然后在设置一个环境变量指向这个目录即可。
 

转换很多逗号的,,,,,,,,, JS的数组为python列表

python李魔佛 发表了文章 • 0 个评论 • 79 次浏览 • 2021-03-29 18:54 • 来自相关话题

不知道JS的写法就是这样还是这样的,一个列表可以这么写
var arr = [,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,2,3,4,5] 前面的逗号就是没有数据,None或者0.
然后JS的代码可以不填充任何数据。python要把它转为list,要怎么做的?
 
有2个方法:
 
1. 最简单,因为,,的意思是0,0, 那么我们可以把两个逗号替换成0,0,
但是如果前面的逗号数是单数,比如是3个逗号,
arr=[,,,1,2,3]
直接替换2个逗号为0,0,的话,结果是0,0,,1,2,3
结果也不对。
多了一对逗号
然后可以直接再替换一次,, 把两个的地方替换为1个,
 
2. 使用finditer找出每个多余2个逗号的起始和结束,然后替换为0, 即可。
for m in re.finditer(',{2,}'):
    start=m.start()
    end=m.end()
     查看全部
不知道JS的写法就是这样还是这样的,一个列表可以这么写
var arr = [,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,2,3,4,5] 前面的逗号就是没有数据,None或者0.
然后JS的代码可以不填充任何数据。python要把它转为list,要怎么做的?
 
有2个方法:
 
1. 最简单,因为,,的意思是0,0, 那么我们可以把两个逗号替换成0,0,
但是如果前面的逗号数是单数,比如是3个逗号,
arr=[,,,1,2,3]
直接替换2个逗号为0,0,的话,结果是0,0,,1,2,3
结果也不对。
多了一对逗号
然后可以直接再替换一次,, 把两个的地方替换为1个,
 
2. 使用finditer找出每个多余2个逗号的起始和结束,然后替换为0, 即可。
for m in re.finditer(',{2,}'):
    start=m.start()
    end=m.end()