阿里系纯粹是自己做死 不注重用户体验的结果
手机里除了支付宝,阿里系的软件基本不会再装。
大概几年前吧,装了淘宝,闲鱼,支付宝,天猫等app,启动其中一个app后就在后期偷偷启动其他几个阿里系的app。 这个在后台app或者在日志(adb logcat -v time) 里面可以看到。
正常启动也就算了关键这几个app实在太占用内存,基本占据了手机内存排行榜的前几年,所以只好把上面的app全部卸载了,留一个平时要的支付宝。
最近几年的双十一,大伙玩的叠猫猫,我基本都没打开过,支付宝老让提示下载天猫,淘宝,说送多少多少红包,呵呵,懒得鸟了。 而且,支付宝永久了,存储空间会达到1.5GB,所以也要定期把app卸载干净,再重新装一次。
双十一每天就是刷猴,身边的老用户知道套路,基本也没人玩,直接pdd下单,又快又便宜。 反正平时买的日用的日用品,用来收纳的,假货也不影响使用。
收起阅读 »
大概几年前吧,装了淘宝,闲鱼,支付宝,天猫等app,启动其中一个app后就在后期偷偷启动其他几个阿里系的app。 这个在后台app或者在日志(adb logcat -v time) 里面可以看到。
正常启动也就算了关键这几个app实在太占用内存,基本占据了手机内存排行榜的前几年,所以只好把上面的app全部卸载了,留一个平时要的支付宝。
最近几年的双十一,大伙玩的叠猫猫,我基本都没打开过,支付宝老让提示下载天猫,淘宝,说送多少多少红包,呵呵,懒得鸟了。 而且,支付宝永久了,存储空间会达到1.5GB,所以也要定期把app卸载干净,再重新装一次。
双十一每天就是刷猴,身边的老用户知道套路,基本也没人玩,直接pdd下单,又快又便宜。 反正平时买的日用的日用品,用来收纳的,假货也不影响使用。
收起阅读 »
夜深了,你们还在吗?
夜深了,你们还在吗???????????????????
大家好啊,日常报道,关照关照
大家好啊,日常报道,关照关照。。。。。。。。。。。。
异步asyncio加锁 的正确用法
对于全局变量count进行统计加锁
1. 如果不加入锁,每次运行的结果可能不一样。
2. 不能用多线程的threading 锁,得到的每次运行结果也有可能不一样
3. 用asyncio的锁要 加关键字 async
收起阅读 »
import aiohttp
import asyncio
import execjs
import threading
global pages
global count
headers = {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "en-US,en;q=0.9",
"Cache-Control": "no-cache",
"Connection": "keep-alive",
"Host": "dcfm.eastmoney.com",
"Pragma": "no-cache",
"Referer": "http://data.eastmoney.com/xg/xg/default.html",
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/69.0.3497.81 Chrome/69.0.3497.81 Safari/537.36",
}
home_url = 'http://dcfm.eastmoney.com/em_mutisvcexpandinterface/api/js/get?type=XGSG_LB&token=70f12f2f4f091e459a279469fe49eca5&st=purchasedate,securitycode&sr=-1&p={}&ps=50&js=var%20hsEnHLwG={{pages:(tp),data:(x)}}&rt=53512217'
loop = asyncio.get_event_loop()
# lock = threading.Lock()
lock = asyncio.Lock()
def parse_json(content):
content += ';function getV(){return hsEnHLwG;}'
ctx = execjs.compile(content)
result = ctx.call('getV')
return result
async def fetch(session,page):
global pages
global count
async with session.get(home_url.format(page),headers=headers) as resp:
# print(f'here:: {page}')
content = await resp.text()
try:
js_content = parse_json(content)
for stock_info in js_content['data']:
securityshortname = stock_info['securityshortname']
# print(securityshortname)
except Exception as e:
print(e)
async with lock:
count=count+1
print(f'count:{count}')
if count == pages:
print('End of loop')
loop.stop()
async def main():
global pages
global count
count=0
async with aiohttp.ClientSession() as session:
async with session.get(home_url.format(1), headers=headers) as resp:
content = await resp.text()
js_data = parse_json(content)
pages = js_data['pages']
print(f'pages: {pages}')
for page in range(1,pages+1):
task = asyncio.ensure_future(fetch(session,page))
await asyncio.sleep(1)
asyncio.ensure_future(main())
loop.run_forever()
1. 如果不加入锁,每次运行的结果可能不一样。
2. 不能用多线程的threading 锁,得到的每次运行结果也有可能不一样
3. 用asyncio的锁要 加关键字 async
收起阅读 »
attrs() got an unexpected keyword argument 'eq'
xda@xda-dt:~$ pip install attrs --upgrade
Collecting attrs
Downloading https://files.pythonhosted.org ... y.whl (49kB)
100% |████████████████████████████████| 51kB 79kB/s
Installing collected packages: attrs
Found existing installation: attrs 18.2.0
Uninstalling attrs-18.2.0:
Successfully uninstalled attrs-18.2.0
Successfully installed attrs-20.3.0
收起阅读 »
Collecting attrs
Downloading https://files.pythonhosted.org ... y.whl (49kB)
100% |████████████████████████████████| 51kB 79kB/s
Installing collected packages: attrs
Found existing installation: attrs 18.2.0
Uninstalling attrs-18.2.0:
Successfully uninstalled attrs-18.2.0
Successfully installed attrs-20.3.0
收起阅读 »
office替代软件,不是WPS,而是openoffice,因为wps的广告受不了
曾经有台电脑装了wps,结果每天联网弹广告。 然后下载一个360杀毒的可以拦截广告,然后电脑弹出的360广告更多了。
哈哈。个人不喜欢wps,但在linux下用的比较多是openoffice,而它也有windows版本,所以在windows平台下是一个不错的替代品。至少干净。
http://www.openoffice.org/download/
收起阅读 »
哈哈。个人不喜欢wps,但在linux下用的比较多是openoffice,而它也有windows版本,所以在windows平台下是一个不错的替代品。至少干净。
http://www.openoffice.org/download/
收起阅读 »
windows下的分区挂载到linux下面,然后docker在上面挂载-无法识别
坑:
windows下的分区挂载到linux下面,然后docker在上面挂载-无法识别。
情况是这样的:
双系统的环境,一个ubuntu,一个windows。 ubuntu上的有个docker,但是ubuntu的分区比较小,需要挂载windows的ntfs分区来扩展空间。
其他程序用起来没什么问题,可是,在用docker 挂在windows分区下的文件夹,总是报错,用的 -v xxxx:xxxx 方式。
同样的docker启动命令,在ubuntu下的目录就没有问题,所以就开始怀疑是权限问题。
但是经过一系列的mount操作,chmod也给足了了权限,可是还没无法启动docker。
后来没办法,只好把windows分区缩小容量,把多余的容量格式化为ext分区格式,然后重新用docker mount -v, 后面docker就可以正常启动了。
收起阅读 »
pyecharts绘图保存为图片 适用于ssh无头浏览器运行
网上搜索到的答案是使用chrome driver实现的, 但是本人的程序是运行在centos下的,centos下折腾chrome driver比较蛋疼,所以看了下pyecharts.render的源码,其实这个也支持使用无头phantomjs进行截图的,当然这个不是一般的直接截取屏幕,是通过JS代码把html里面的渲染图像下载下来,清晰度比普通截图要高很多很多。
make_snapshot(snapshot, bar.render(), f"data/{today}_cb.png", driver=driver)
在最后一行传入一个driver既可以了,这个driver使用phantomjs的实例。
收起阅读 »
make_snapshot(snapshot, bar.render(), f"data/{today}_cb.png", driver=driver)
在最后一行传入一个driver既可以了,这个driver使用phantomjs的实例。
import os
from pyecharts.render import make_snapshot
from snapshot_selenium import snapshot
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar
import sys
from selenium import webdriver
from pyecharts.commons.utils import JsCode
if sys.platform == 'win32':
SELENIUM_PATH = r'C:\OneDrive\Tool\phantomjs-2.1.1-windows\phantomjs-2.1.1-windows\bin\phantomjs.exe'
driver = None
else:
SELENIUM_PATH = './phantomjs'
driver = webdriver.PhantomJS(executable_path=SELENIUM_PATH)
bar = (
Bar()
.add_xaxis(list(result_dict .keys()))
.add_yaxis(f"{today}-可转债价格分布", y_list, category_gap=3)
.add_yaxis(f"{today}-正股价格分布", y_zg_list, category_gap=3)
.set_series_opts(
label_opts=opts.LabelOpts(is_show=True),
axispointer_opts=opts.AxisPointerOpts(is_show=True))
.set_global_opts(
title_opts=opts.TitleOpts(title="可转债价格分布"),
xaxis_opts=opts.AxisOpts(
name="涨跌幅",
is_show=True,
name_rotate=30,
),
graphic_opts=[
opts.GraphicGroup(
graphic_item=opts.GraphicItem(
left="70%",
top="20%",
),
children=[
opts.GraphicText(
graphic_item=opts.GraphicItem(
left="center",
top="middle",
z=100,
),
graphic_textstyle_opts=opts.GraphicTextStyleOpts(
text=JsCode(
f"['涨幅>=0:{bigger}',"
f"'涨幅<0:{smaller}',"
f"'平均涨幅:{avg}%',"
f"'波动方差:{std}',"
f"'',"
f"'最大:{max_name} {max_pct}%',"
f"'最小:{min_name} {min_pct}%',"
"''].join('\\n')"
),
font="14px Microsoft YaHei",
graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
fill="#333"
)
)
)
]
)
],
)
)
bar.render(os.path.join('data', f"{today}_cb.html"))
make_snapshot(snapshot, bar.render(), f"data/{today}_cb.png", driver=driver)
收起阅读 »
使用sshtunnel SSHTunnelForwarder 作为跳板连接mysql后一直卡住不退出
代码如下:
后面发现日志里面,mysql的连接没有断开,导致server没有被关闭,所以在上面的代码中加一句:
把mysql的连接关闭,然后就可以把ssh的连接关闭,然后打印stop字符了。
收起阅读 »
server = SSHTunnelForwarder(代码运行后并没有结束,或者没有答应stop的字符。 在程序里已经使用了server.stop()关闭ssh的连接。
ssh_address_or_host=host,
ssh_port=port,
ssh_username=user,
ssh_password=password,
local_bind_address=('127.0.0.1', local_port),
remote_bind_address=(host, mysql_port)
)
server.start()
conn = pymysql.connect(
host='127.0.0.1',
port=local_port,
user=user,
password=password,
db='db_stock'
)
cursor = conn.cursor()
cursor.execute('select count(*) from tb_cb_index')
ret = cursor.fetchall()
print(ret)
server.stop()
print('stop')
后面发现日志里面,mysql的连接没有断开,导致server没有被关闭,所以在上面的代码中加一句:
print(ret)
conn.close()
server.stop()
print('stop')
把mysql的连接关闭,然后就可以把ssh的连接关闭,然后打印stop字符了。
收起阅读 »
免费代理ip与收费的代理ip
在爬虫采集数据过程中,经常会遇到ip被限制,这也是常见的问题。因为网站都会根据ip访问的频率进行判断封锁ip,这是反爬虫机制的策略,如果拥有大量的ip资源,自然会突破ip限制的反爬虫策略。
曾经有尝试过使用免费的代理ip来搭建代理池,可是免费的代理ip不仅资源少,而且可用率、高匿性、速度等都极差,每次使用都需要借助第三方软件进行检查是否可用,严重影响效率,根本满足不了任务的需求。
收费的代理ip与免费的代理ip差距非常大,不仅拥有海量的ip资源,可用率、高匿性、速度都是极好。操作简单工作效率既然提高上去了。经过多家的测试,最终选择了性价比最高的万变ip。高质量的优质代理ip才可以真正用来防止爬虫被封锁,如果使用普通代理,爬虫的真实IP还是会暴露。新获取一批新IP 收起阅读 »
曾经有尝试过使用免费的代理ip来搭建代理池,可是免费的代理ip不仅资源少,而且可用率、高匿性、速度等都极差,每次使用都需要借助第三方软件进行检查是否可用,严重影响效率,根本满足不了任务的需求。
收费的代理ip与免费的代理ip差距非常大,不仅拥有海量的ip资源,可用率、高匿性、速度都是极好。操作简单工作效率既然提高上去了。经过多家的测试,最终选择了性价比最高的万变ip。高质量的优质代理ip才可以真正用来防止爬虫被封锁,如果使用普通代理,爬虫的真实IP还是会暴露。新获取一批新IP 收起阅读 »
autojs基础教程 入门篇
1. 脚本存放路径:内部存储设置(内置存储卡)根目录 /storage/脚本
像下面笔者自己封装的一个模块:
可以把文件保存为Helper.js, 然后要放到 手机的 "脚本" 文件夹下
然后在其他文件中,如果要调用
然后后续可以用helper来正常操作,比如上面我要自动启动 银河证券
华宝油气自动化申购脚本 AutoJS
更新待续。。。。
收起阅读 »
"/storage/emulated/0/脚本/"2. 对于一些封装的模块的调用
像下面笔者自己封装的一个模块:
function Helper(packageName) {
this.packageName = packageName;
if (packageName && !getAppName(packageName)) {
toast("找不到此应用, 无法提供服务");
this.sleep(1000);
exit();
}
this.click = function (x, y) {
return click(x, y);
};
this.clickCenter = function (widget) {
if (!widget) {
toast('找不到控件');
return false;
}
let rect = widget.bounds();
return click(rect.centerX(), rect.centerY());
};
this.clickSelectorCenter = function (selector) {
if (!selector) {
toast('找不到控件');
return false;
}
let widget = selector.findOne(2000);
return this.clickCenter(widget);
};
this.clickMulti = function (points, interval) {
points.forEach(function (point) {
this.click(point[0], point[1]);
this.sleep(interval);
}.bind(this));
};
this.clickMultiCenter = function (widgets) {
if (!widgets || widgets.length == 0)
return;
var points = ;
widgets.forEach(function (widget) {
var rect = widget.bounds();
points.push([rect.centerX(), rect.centerY()]);
});
this.clickMulti(points);
};
this.clickIdCenter = function (idStr) {
if (!idStr) {
toast('找不到控件');
return false;
}
return this.clickSelectorCenter(id(idStr));
};
this.clickTextCenter = function (str) {
if (!str) {
toast('找不到控件');
return false;
}
return this.clickSelectorCenter(text(str));
};
this.clickRegTextCenter = function (str) {
if (!str) {
toast('找不到控件');
return false;
}
return this.clickSelectorCenter(textMatches(str));
};
this.clickDescCenter = function (str) {
if (!str) {
toast('找不到控件');
return false;
}
return this.clickSelectorCenter(desc(str));
};
this.clickRegDescCenter = function (str) {
if (!str) {
toast('找不到控件');
return false;
}
return this.clickSelectorCenter(descMatches(str));
};
this.clickClassCenter = function (classNameStr) {
if (!className) {
toast('找不到控件');
return false;
}
return this.clickSelectorCenter(className(classNameStr));
};
// index表示第几个文字, 从1开始
this.clickNTextCenter = function (str, index) {
if (!str)
return false;
let widgets = text(str).find();
if (!widgets)
return false;
index--
for (let i = 0; i < widgets.length; i++) {
let widget = widgets[i];
if (i == index)
return this.clickCenter(widget);
else
continue;
}
return false;
};
this.pageUp = (counter, time) => {
if (counter && time) {
for (let i = 0; i < counter; i++) {
scrollUp();
this.sleep(time);
}
} else {
scrollUp();
}
};
this.pageDown = (counter, time) => {
if (counter && time) {
for (let i = 0; i < counter; i++) {
scrollDown();
this.sleep(time);
}
} else {
scrollDown();
}
};
this.swipe = function (x1, y1, x2, y2, duration) {
swipe(x1, y1, x2, y2, duration);
};
this.sleep = (second) => {
sleep(second * 1000);
};
this.back = function () {
back();
};
this.home = function () {
home();
};
this.shell = function (command) {
shell(command, true);
};
this.launch = function () {
launch(this.packageName);
};
this.waitForActivity = function (activityName) {
waitForActivity(activityName);
};
this.launchActivity = function (activityName) {
shell("am start -n " + this.packageName + "/" + activityName, true);
waitForActivity(activityName);
};
this.kill = function () {
shell("am force-stop " + this.packageName, true);
};
this.before = function (ignoreSleep) {
let source = engines.myEngine().source.toString();
source = source.replace("/storage/emulated/0/脚本/", "");
toast("开始执行[" + source + "]...");
const WIDTH = Math.min(device.width, device.height);
const HEIGHT = Math.max(device.width, device.height);
setScreenMetrics(WIDTH, HEIGHT);
if (!ignoreSleep)
this.sleep(random() * 10); //随机睡眠[0-10]秒, 使签到\打卡时间不固定
};
this.after = function () {
let source = engines.myEngine().source.toString();
source = source.replace("/storage/emulated/0/脚本", "");
toast("结束执行[" + source + "]...");
exit();
};
this.getCaptureImg = () => {
var img = captureScreen();
if (!img || typeof (img) == "undifined") {
console.log("截图失败,退出脚本");
exit();
} else {
return img;
}
}
}
module.exports = Helper;[/i]
可以把文件保存为Helper.js, 然后要放到 手机的 "脚本" 文件夹下
然后在其他文件中,如果要调用
[i]var Helper = require("Helper.js");
var helper = new Helper("com.galaxy.stock");[/i]
然后后续可以用helper来正常操作,比如上面我要自动启动 银河证券
[i]helper.launch()[/i]就可以了
华宝油气自动化申购脚本 AutoJS
更新待续。。。。
收起阅读 »
pandas dataframe 切片与python列表切片的区别
有一个Dataframe
df = pd.DataFrame(np.arange(16).reshape((8,2)),index=list('abcdefgh'),columns=['COL1','COL2'])
COL1 COL2那么如果我用df['a':'e'] 返回的结果是:
a 0 1
b 2 3
c 4 5
d 6 7
e 8 9
f 10 11
g 12 13
h 14 15
COL1 COL2是包含e尾部的,
a 0 1
b 2 3
c 4 5
d 6 7
e 8 9
而python的切片
a = [0,1,2,3,4,5]
a[1:5] 是不包含最后一个元素的。
原文链接:
http://30daydo.com/article/630
收起阅读 »
Python爬虫学习者需要注意什么?
在这个大数据时代里,学习Python网络爬虫的人越来越多,在学习过程中难免会遇到一些问题,学习者最常见的问题就是遇到ip被限制,因为你在爬虫采集数据过程中,同一个ip频繁的对网站进行访问,会给对方服务器会造成压力, 那么网站就根据ip访问的频率来限制你的ip,这也是反爬虫机制常见的一种判断。
最常见的解决方法就是使用大量的ip,就是借着代理ip保证IP被封时有替换IP可用,永远保持着续航能力。这里推荐51代理ip,作为一家提供代理IP的专业服务商,万变ip代理拥有强大的技术团队运营维护,全高匿系统所产生的高匿ip不仅安全稳定、而且速度快, 以及与爬虫用户多年来合作的宝贵经验,是Python爬虫首选代理IP。
Python是一种全栈计算机程序设计语言,全栈,顾名思义,应用范围广。你可能听说过很多编程语言,例如C语言,Java语言等,众所周知,这些语言都非常难学,更别说景桐使用了。而python不一样,比如完成一个Web服务,C语言要写1000行代码,Java要写100行,而python可能只要写20行。对!这就是差距!目前由于python“简单易懂”,已逐步成为网络爬虫主流语言。
在初学python爬虫时,很多程序员会被一些“小问题”阻碍脚步,为避免大家再次犯同样的错误,加快学习进程,在爬取网站信息时一定要使用大量代理IP。好用的代理IP服务商,
高效率的爬虫工作离不开ip代理的支持,这就是ip代理越来越受欢迎的原因!收藏举报投诉 收起阅读 »
最常见的解决方法就是使用大量的ip,就是借着代理ip保证IP被封时有替换IP可用,永远保持着续航能力。这里推荐51代理ip,作为一家提供代理IP的专业服务商,万变ip代理拥有强大的技术团队运营维护,全高匿系统所产生的高匿ip不仅安全稳定、而且速度快, 以及与爬虫用户多年来合作的宝贵经验,是Python爬虫首选代理IP。
Python是一种全栈计算机程序设计语言,全栈,顾名思义,应用范围广。你可能听说过很多编程语言,例如C语言,Java语言等,众所周知,这些语言都非常难学,更别说景桐使用了。而python不一样,比如完成一个Web服务,C语言要写1000行代码,Java要写100行,而python可能只要写20行。对!这就是差距!目前由于python“简单易懂”,已逐步成为网络爬虫主流语言。
在初学python爬虫时,很多程序员会被一些“小问题”阻碍脚步,为避免大家再次犯同样的错误,加快学习进程,在爬取网站信息时一定要使用大量代理IP。好用的代理IP服务商,
高效率的爬虫工作离不开ip代理的支持,这就是ip代理越来越受欢迎的原因!收藏举报投诉 收起阅读 »
艾德暗盘交易时间
看了下APP,和富途等其他券商一样,都是在16:15分。
港股开户:
联系小助手,融资额度20倍,不用抢。
港股开户:
联系小助手,融资额度20倍,不用抢。
优矿 由于您的Notebook运行内容占用内存过大或其他逻辑错误,微核已自动重启。
刚打开一个空白的notebook,就给我提示这个错误信息,看来优矿要收割用户了,还好我有本地数据。
Python爬虫虎牙平台主播的图片代码
今天万变ip就为大家分享一下,Python爬虫是如何爬取虎牙平台的主播图片。这里我们主要爬取虎牙星秀的主播图片,并下载保存到本地。在爬取之前,我们可先打开目标页面,F12审查元素,查找我们需要的信息所在的位置。
代码如下:
import urllib.request
import re
import os
# 全局变量用来记录图片的编号
gl_z = 0
def down_img(url1):
"""下载图片"""
# 处理图片链接,拼接http:
url = "https:" + re.sub(r"\?", "", url1)
global gl_z
print(url)
# 请求链接
response = urllib.request.urlopen(url)
# 读取内容
data = response.read()
# 切片取出图片名称
file_name = url[url.rfind('/') + 1:]
# 生成列表
a = [x for x in range(10000)]
# 打开文件用以写入
file = open(os.path.join("photo3", "img" + file_name + str(a[gl_z]) + ".jpg"), "wb")
file.write(data)
# 关闭文件
file.close()
# 编号加1
gl_z += 1
if __name__ == '__main__':
# 要抓去信息的网址
home = """http://www.huya.com/g/xingxiu"""
# 模拟请求头
headers = {
"Host": "www.huya.com",
"User-Agent": "agent信息"
}
# 构造好请求对象 将请求提交到服务器 获取的响应就是到首页的html代码
request = urllib.request.Request(url=home, headers=headers)
response = urllib.request.urlopen(request)
# 读取抓到的内容并解码
html_data = response.read().decode()
"""huyaimg.msstatic.com/avatar/1054/db/6590aa9bcf98e12e5d809d371e46cc_180_135.jpg
"""
# 使用正则 从首页中 提取出所有的图片链接
img_list = re.findall(r"//huyaimg\.msstatic\.com.+\.jpg\?", html_data)
print(img_list)
# 取出每张图片进行下载
for img_url in img_list:
print(img_url)
down_img(img_url) 收起阅读 »
代码如下:
import urllib.request
import re
import os
# 全局变量用来记录图片的编号
gl_z = 0
def down_img(url1):
"""下载图片"""
# 处理图片链接,拼接http:
url = "https:" + re.sub(r"\?", "", url1)
global gl_z
print(url)
# 请求链接
response = urllib.request.urlopen(url)
# 读取内容
data = response.read()
# 切片取出图片名称
file_name = url[url.rfind('/') + 1:]
# 生成列表
a = [x for x in range(10000)]
# 打开文件用以写入
file = open(os.path.join("photo3", "img" + file_name + str(a[gl_z]) + ".jpg"), "wb")
file.write(data)
# 关闭文件
file.close()
# 编号加1
gl_z += 1
if __name__ == '__main__':
# 要抓去信息的网址
home = """http://www.huya.com/g/xingxiu"""
# 模拟请求头
headers = {
"Host": "www.huya.com",
"User-Agent": "agent信息"
}
# 构造好请求对象 将请求提交到服务器 获取的响应就是到首页的html代码
request = urllib.request.Request(url=home, headers=headers)
response = urllib.request.urlopen(request)
# 读取抓到的内容并解码
html_data = response.read().decode()
"""huyaimg.msstatic.com/avatar/1054/db/6590aa9bcf98e12e5d809d371e46cc_180_135.jpg
"""
# 使用正则 从首页中 提取出所有的图片链接
img_list = re.findall(r"//huyaimg\.msstatic\.com.+\.jpg\?", html_data)
print(img_list)
# 取出每张图片进行下载
for img_url in img_list:
print(img_url)
down_img(img_url) 收起阅读 »
斐讯N1 armlinux 长时间运行会导致文件系统只读 readonly
斐讯N1 刷的armlinux 长时间运行会导致文件系统只读 readonly。
比如放着几个晚上不关机,然后文件系统变成了只读,无法写入文件,提示只读系统。
原因是系统分区有坏道。 可能由于关机使用拔电源的方式导致的。
所以要养成好的习惯,正常关机,使用命令 shutdown -h 或者点击关机按钮就好了。
那么如果出现了上述问题,怎么办?
可以使用用U盘启动,运行一次e2fsck /dev/mmcblk1p2
然后选择Y,修复坏道就可以了。
U盘启动就是之前刷Armlinux时的那个U盘。
接上U盘,然后上电启动即可。 然后进入系统运行上述的命令:
e2fsck /dev/mmcblk1p2
收起阅读 »
比如放着几个晚上不关机,然后文件系统变成了只读,无法写入文件,提示只读系统。
原因是系统分区有坏道。 可能由于关机使用拔电源的方式导致的。
所以要养成好的习惯,正常关机,使用命令 shutdown -h 或者点击关机按钮就好了。
那么如果出现了上述问题,怎么办?
可以使用用U盘启动,运行一次e2fsck /dev/mmcblk1p2
然后选择Y,修复坏道就可以了。
U盘启动就是之前刷Armlinux时的那个U盘。
接上U盘,然后上电启动即可。 然后进入系统运行上述的命令:
e2fsck /dev/mmcblk1p2
收起阅读 »
Python爬虫如何防止ip被封?
Python爬虫采集数据过程中,经常遇到网站的反爬虫机制,当相同的ip频繁的对服务器进行访问,就很容易出现ip被限制的,这就是常见的一种反爬虫策略,ip被限制会影响工作的进度甚至无法再继续工作,那么如何去避免呢?
第一种:降低访问的速度,我们可以使用 time模块中的sleep,使程序每运行一次后就睡眠1s,这样可以很有效的降低ip被封机率,但是效率效果不是很高,一般是用于量小的采集任务。
第二种:使用类似万变ip代理这样的优质换ip软件,这也是爬虫工作者最常用的手段之一,通过代理ip来伪装我们的ip,隐藏本地真实的ip地址,让目标服务器无法识别是相同ip发出的请求,这样就很有效的防止ip被封。突破了ip的限制,采集数据的任务就会顺利,工作效率自然会提高!
收起阅读 »
第一种:降低访问的速度,我们可以使用 time模块中的sleep,使程序每运行一次后就睡眠1s,这样可以很有效的降低ip被封机率,但是效率效果不是很高,一般是用于量小的采集任务。
第二种:使用类似万变ip代理这样的优质换ip软件,这也是爬虫工作者最常用的手段之一,通过代理ip来伪装我们的ip,隐藏本地真实的ip地址,让目标服务器无法识别是相同ip发出的请求,这样就很有效的防止ip被封。突破了ip的限制,采集数据的任务就会顺利,工作效率自然会提高!
收起阅读 »
网络爬虫的分类
网络爬虫应该选择 Nutch、Crawler4j、WebMagic、scrapy、WebCollector 还是选择其他?
网络爬虫我们可以分为三大类型:
(1)分布式爬虫:Nutch
(2)JAVA爬虫:Crawler4j、WebMagic、WebCollector
(3)非JAVA爬虫:scrapy(基于Python语言开发)
网络爬虫采集数据过程中,经常会遇到被反爬虫机制限制,最常见的就是ip被限制,网站根据ip的访问频率来识别
判断爬虫,当相同的ip频繁的对目标服务器进行访问,那么就会触发服务器的反爬虫机制,这个时候ip就会被限制
或者无法进行访问,爬虫工作将无法继续进行,因此需要借用到万变ip代理来突破ip的限制。
收起阅读 »
网络爬虫我们可以分为三大类型:
(1)分布式爬虫:Nutch
(2)JAVA爬虫:Crawler4j、WebMagic、WebCollector
(3)非JAVA爬虫:scrapy(基于Python语言开发)
网络爬虫采集数据过程中,经常会遇到被反爬虫机制限制,最常见的就是ip被限制,网站根据ip的访问频率来识别
判断爬虫,当相同的ip频繁的对目标服务器进行访问,那么就会触发服务器的反爬虫机制,这个时候ip就会被限制
或者无法进行访问,爬虫工作将无法继续进行,因此需要借用到万变ip代理来突破ip的限制。
收起阅读 »
pipreqs python3 不兼容问题解决
这里面可能会报几个错误:
1. 如果报错信息是:
如果提示“UnicodeDecodeError: 'gbk' codec can't decode ”的错误,需要指定字符集 --encoding=utf8
pipreqs ./ --encoding=utf8
2. 出现诸如:
明显的python2的语法报错,这时很可能是你的项目中有python2语法的py文件,可以使用
--ignore <dirs> ...忽略额外的目录
参数解决。
原文链接:
http://30daydo.com/article/619
转载请注明出处 收起阅读 »
1. 如果报错信息是:
如果提示“UnicodeDecodeError: 'gbk' codec can't decode ”的错误,需要指定字符集 --encoding=utf8
pipreqs ./ --encoding=utf8
2. 出现诸如:
Traceback (most recent call last):
File "c:\anaconda\envs\py37\lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "c:\anaconda\envs\py37\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\anaconda\envs\py37\Scripts\pipreqs.exe\__main__.py", line 7, in <module>
File "c:\anaconda\envs\py37\lib\site-packages\pipreqs\pipreqs.py", line 470, in main
init(args)
File "c:\anaconda\envs\py37\lib\site-packages\pipreqs\pipreqs.py", line 409, in init
follow_links=follow_links)
File "c:\anaconda\envs\py37\lib\site-packages\pipreqs\pipreqs.py", line 138, in get_all_imports
raise exc
File "c:\anaconda\envs\py37\lib\site-packages\pipreqs\pipreqs.py", line 124, in get_all_imports
tree = ast.parse(contents)
File "c:\anaconda\envs\py37\lib\ast.py", line 35, in parse
return compile(source, filename, mode, PyCF_ONLY_AST)
File "<unknown>", line 162
except Exception ,e:
^
SyntaxError: invalid syntax
明显的python2的语法报错,这时很可能是你的项目中有python2语法的py文件,可以使用
--ignore <dirs> ...忽略额外的目录
参数解决。
原文链接:
http://30daydo.com/article/619
转载请注明出处 收起阅读 »
2020-10-20 可转债市场成交量较昨天多一倍
因为可转债的t0属性,所以并不一定是增量资金进场,不过,因为成交量放大得太多,所以,肯定可以说明的是活跃资金在不断换手。
最近的策略就是减仓。
最近的策略就是减仓。
Started update UTMP about system Runlevel during booting ubuntu/armlinux
I hit this issue on my ARMLinux (Same arch as Ubuntu), i can't login system with graphic. It always stuck on the line
Started update UTMP about system Runlevel
Finally, i try to enter into secure mode and check logs.
it was caused by system disk is out of space.
So i try to delete some unless file to release some space, then reboot system, then everything is ok now.
http://30daydo.com/article/617
收起阅读 »
Started update UTMP about system Runlevel
Finally, i try to enter into secure mode and check logs.
it was caused by system disk is out of space.
So i try to delete some unless file to release some space, then reboot system, then everything is ok now.
http://30daydo.com/article/617
收起阅读 »
pycharm实用插件
1. rainbow bracket
括号对变成彩色的
2. kite
人工智能预测输入提示: 根据机器学习,预测你下一个输入函数的名
括号对变成彩色的
2. kite
人工智能预测输入提示: 根据机器学习,预测你下一个输入函数的名
为什么美股打新只能打部分公司,而且大部分都是中国境内运营的公司?
之前一个比较疑惑的问题,在一些可以打美股新股的券商软件上,明明看到不少美股新股上市,排队也爬的慢慢的,为什么我们只能打一些中国境内运营的公司?
原因是:
作为全球第一大市场,美股每年IPO融资规模和上市宗数基本稳定在全球前3。
从之前笔者汇总的数据来看:美股IPO首日破发率比港股还要低一点,打新确实有利可图。可为什么一直火不起来呢?
应粉丝要求,今天简单讲一讲。可能有的地方会说错,欢迎指正。美股打新只有美国人可以参与,其他人只能参与国际配售。其实港股也是这样的,不允许非香港居民参与公开申购,很多银行都严格执行这个规定,但是对参与国际配售就没有限制。
然而港交所并不认真查这个,原因有2点:香港本地居民很少参与IPO认购,2018年之前新股平均认购人数不足3000。大概是因为本地券商手续费太高,申购新股根本赚不到钱。如果再不让大陆人来参与的话,很多公司都发不出去。
同时,投资者通过券商认购新股,港交所会收取5元/笔的EIPO费用。如果单个新股有20万人申购,就可以一次收100万元,谁会跟钱过不去?
港股很多规则是跟美股学的,还是说回美股。
具体申购美股要不要钱(指费用)我不知道,反正国际配售不要钱。连1.0077%中签费好像都没有,参与成本低于港股IPO。
美国居民人数是香港的几十倍,不用担心人数不足;
美国法律那是杠杠的,应该没有券商敢去以身试法。
所以大陆人只能参与国际配售,就会面临一个很麻烦的问题:我们能接触到的开户券商根本就拿不到货,除了少数几个中概股之外。
那么,我们能参与的标的就非常少,通常一年也就那么几次。然而问题并不是到此为止。
还有几个很现实的问题:
首先是新股上市首日,时间很不确定。据说在美股开盘后,新股有很长一段时间是集合竞价时间,将会在这半小时至2小时内随机开盘。你以为可以提前挂个竞价单去睡觉?很不幸,这是不可能的,因为你股票大概率还没到账!
券商拿到股票之后,在通过各种后台分发到投资者账户,根据上手(可以认为是保荐人或者承销商)的不同,时长也不同。反正基本不要指望开盘前能到。
亏钱就算了,还TM不知道要熬夜到几点!
还有一点,同样让人很纠结:券商在派货上有相当大的自主权。
如果股票热门,不分给你,你又能怎么样?跟你很熟吗?
有券商经常这样玩:
认购100股,分50股;
认购300股,还是分50股!
认购1000股,也只分了50股...
为了做到人人有份,简直是侮辱智商!那以后SB才去认购那么多!
烂票都是你的,这个你肯定也不介意吧
申购100股,能分你130股,因为你交的1000美元,下限定价后可以买130股啦!加量不加价哟...
基本就讲完了吧,我只玩过一次就果断拉黑了。集团上市不让我们参与,也没搞成。如果后面有非常好的标的去美国上市,我可能会再参与下。
出了瑞幸这档子事之后,中概股去美国上市,估计要被砍估值。
如果读者有需要开港美股,可以关注公众号:
后台留言: 港美股开户
优惠多多哦。 收起阅读 »