2022年5月

人们遇到比自己更优秀的人,要么丑化他,要么神话他。我觉得这是刻在基因里面的。基因要求更优秀的人塑造更好的基因环境。
可一旦神化了一个人,这个人就没有缺点了,他大概每天要做的事情就是正确的事情,别的事情他大概都不会做了。现在可以把这么一个人代入想象一下:这个人是不是要吃饭?要不要做爱?会不会放屁拉屎尿尿?
更重要的是,这个人真的不会说错话做错事吗?想想那些现在的和过去的伟大的人物,他们有这样那样的称号:伟人、圣贤、活佛、神……互联网时代还会叫某某爸爸。当然也感谢这个时代,信息每分每秒从地球各地传来,能让我们认识到,即使是做到顶级优秀的人,他也是在不断地犯错。乔布斯会犯错,他也出过失败的产品比如Lisa。马斯克也会犯错,他回顾自己在做Roadster的时候拿着创业团队的开发手板当做量产,还买了莲花汽车的油车底盘当电车底盘,可谓是一错再错。做领导到顶级的,美国总统应该算是其一了吧,那么川普和拜登满嘴跑火车的可就更多了。
既然商界神一样的人物乔布斯马斯克会犯错,既然政界顶级的大佬也会犯错,那么不如他们的大批大批人类————或许我该说所有人类————当然也会大把大把的犯错。推而广之,历史上的所有人类概莫能外。我们之所以没看到他们犯错,大概率是因为他们自己或者他们身边的人不让我们看到。既然家丑都不得外扬,圣贤伟人之错就更不能说了。还有,在他们作为圣贤伟人的时间和地域之内看不到错误,在这之外可就大把错误了。比如当朝皇上不会有错,后世评价可就未必了。朝鲜总书记在朝鲜不会有错,在朝鲜之外可是调侃对象了。
还有孔圣人,活着的时候没当成圣人,都没有国家接纳,那时候看起来肯定很多错。汉朝董仲舒“罢黜百家,独尊儒术”之后才成了圣人,此时孔子已经死了300多年。到了20世纪初期新文化运动,孔子被鲁迅为代表的一众人骂的狗血喷头,直到十年之劫时期还要打倒孔家店。到今日,我们又在全球到处开办孔子学院,又开始尊儒术,不知孔子他老人家的问题还说不说得了。
那么,圣贤伟人为什么可以成为圣贤伟人?有时候是运气,有时候是认准了方向与自己能力匹配坚持了下去(也即是准确预测了未来并投资了未来)。皇帝太子当了皇帝,必然有运气,投胎不对基本没戏。另外商界成功运气之外还是看综合预测能力,即使我小错不断,但大方向对了,而且还有能力比别人提前实现,那就能最后成功,成功之后成了神,就“没有错误了”。
所以,不能怕犯错,关键要做决策。方向要搞对,搞对就得坚持。

是需要解决以下矛盾:

  1. 物品多而杂, 收纳困难-->电器和家具功能集成化小型化
  2. 各人因学习需要上网课, 工作需要在线会议, 娱乐需要看各自的视频, 需要解决独享私密空间和共享公共空间之间的矛盾.
  3. 需要解决在家办公学习更便利却产生的紧张感, 和家庭温馨舒适环境的矛盾-->办公用品/电器/软装从冷酷变得家居化.

办公室的办公环境喜欢用黑白或者蓝色等冷色调, (暖色调限于员工办公桌面)以及大量的玻璃隔断, 老板房间喜欢用棕红色木纹, 小到只摆放一套茶具, 达到整个房间用红木装修, 体现自己和公司的气派. 所有装饰横平竖直, 几乎看不到大圆角和曲线, 展示的是一种规矩. 人接触的大多数平面为硬表面, 办公椅千篇一律, 除了老板的大皮椅子, 大多数椅子采用绒布表面, 椅垫不厚. 不柔软就缺少温暖.

所以目标是既实用又温馨.

有舍才有得, 哪些家具应该被换掉?

  • 房间较小的家庭, 儿童房二层为床,一层可以作为专注力的学习空间.
  • 房间较大的家庭, 已经购置学习桌或者打算购置学习桌的, 可以替换掉学习桌所占用的面积.
  • 对于主卧, 也可以做成双层, 两种方案, 一是上面床下面办公, 这种方式感觉多了一层疲惫感, 每次还要爬上去; 另一种是下面床上面办公. 这种方式要一定防止大的噪音, 如脚步声和挪动桌椅的声音.
  • 对于客厅,可以把沙发换成学习办公房. 学习办公的时候最好可以把电视收起来或者隐蔽起来.

搞了半天的PlayWright, 忽然想到这不应该有无代码的爬虫工具么? 比如叫数据采集器? Data Collector?
查了一下国内的火车头采集器和国外的有些采集器真的收费不菲, 然后就发现Chrome应用商店里有crx应用, 尝试了1个, 发现真香,哈哈.
名称: Instant Data ScraperNoCoding Data Scraper - Easy Web Scraping
这里还有一篇文章https://zapier.com/blog/best-data-collection-apps/介绍了5个, 不过还没有细看.

Instant Data Scraper

尝试了Instant Data Scraper, 体验很好, 非常好用. 强烈推荐.
它的特点是可以对翻页表格数据和无限流数据进行爬取, 配置速度极快. 问题是不能爬取表格内的详情页.
基本使用方式: 点击try another table, 切换到数据区域后, 点击Locate "next" button, 选择下一页按钮, 如果是无限流页面,则选择无限流, 然后对列进行删减选择, 点击start crawling开始爬取.

网站 特殊爬取方式
淘宝 搜索关键词后, 需要把页面切换为列表显示方式. 可以爬到价格
京东 需要使用m.jd.com网址爬取, 无限流方式. 可以爬到价格

Web Scraper - Free Web Scraping

它就可以一级一级的深入到详情页爬取, 相对强大一些, 但配置起来也也要慢一些. 每一个要爬取的参数都要单独配置.

油猴

油猴里搜索scraper也有一些脚本. 有空可以体验.

讲得蛮好.

  1. 如果通胀高于利率, 负债是有利的. 另外比如美国是负利率, 负债还能赚钱.
  2. 2008~2018年贷款是有折扣甚至是低于五年期LPR 4.6%的,都不用急着还钱. 公积金一定不用还, 利息只有3.25%. 2019年10月由个人基准贷款利率转变为LPR利率是比较高的,首套5.5%以上, 二套6%以上, 就不划算了, 可以早点还完.
  3. 在不同的城市有普惠金融, 可以抵押房产获取4%的贷款, 这样可以换完申请这种低息贷款.
  4. 如果等额本息先还的是利息, 超过1/3, 再还是一样的. 等额本金比较适合提交前还贷.
  5. 有房贷的个税抵扣每个月可以抵扣1000元.

主要能源对比

注意:都没有计算封装, 如装气的气管, 装油的油箱, 装电池的封装.装电池的封装应该体积和重量还是比较高的.
另外, 实际还需要考虑生产该项能源所需要花费的能量或者成本, 下面也没有列出来.

能源 比重(g/ml) 比能或者热值(KJ/g) 体积能量密度(KJ/ml) 动力转换效率 有用功体积能量密度
液态氢 0.07 142 9.94 - -
三元锂电池 2.5 0.9 2.25 0.9 2.025
磷酸铁锂电池 2.5 0.576 1.44 0.9 1.296
汽油 0.72 43.2 31.104 0.4 12.4416
柴油 0.84 42.7 35.868 - -
天然气 0.44 47.8 21.032 - -
石油气 0.58 47.5 27.55 - -
石油 0.88 43 37.84 - -
烟煤 - 26 - - -

单位换算

1大卡(千卡) = 4.19 千焦耳
1Wh(瓦时) = 3.6 千焦耳

以秦对比

参数 秦Plus EV电池 秦燃油版
重量kg 382.57 28.08
能量密度Wh/kg 140 -
电池容量71.7kWh 53.56 -
续航km 600 565.21
容积L 223.12 39
百公里油耗L/100Km - 6.9

刀片电池参数

单片刀片电池参数
长m 0.96
宽m 0.09
厚m 0.0135
体积L 1.1664
重量kg 2
密度kg/L 1.71467764060357

参考文章

以下都是基于Python的. playwright也支持js和java
强大易用!新一代爬虫利器 Playwright 的介绍
playwright 爬虫使用, 这篇参考了上一篇, 算是学习笔记, 另外增加了cookie使用
Scraping the web with Playwright
官方文档

概述

Playwright用作爬虫入门最麻烦的就是, 一开始看官方介绍文档最费劲没用. 官方文档上来就是介绍怎么测试, 运行用的命令也不一样, 其实完全不需要那么麻烦.

安装

npm i playwright

正常的安装方式. 如果是官方文档 ,这一步就麻烦很多.

使用

官方文档上来就导入了test库, 而用于爬虫完全不需要. 以爬取eastmoney的新闻为例:

const playwright = require('playwright');
async function main() {
    const browser = await playwright.chromium.launch({
        headless: false // setting this to true will not run the UI
    });

    const page = await browser.newPage();
    await page.goto('https://so.eastmoney.com/news/s?keyword=%E5%90%9B%E5%AE%9E%E7%94%9F%E7%89%A9');
    const titles = await page.$$eval('.news_item', ele=>{
      // return ele.innerText
      let t = []
      for(e of ele){
        t.push({
          title: e.querySelector('.news_item_t a').text,
          link: e.querySelector('.news_item_t a').href,
          time: e.querySelector('.news_item_time').textContent,
        })
      }
      return t
    })
    console.log(titles)
    await page.waitForTimeout(5000); // wait for 5 seconds
    await browser.close();
}

main();

正式进入爬虫前有三步: 1. playwright打开浏览器; 2. 浏览器打开空页面; 3. 空页面打开网址;
正式爬虫就是用page.$eval或者page.$$eval函数从页面的上下文环境(等同于浏览器的console)中运行js并返回.
$eval相当于浏览器console中的$, 而$==document.querySelector, 必填参数第一个是选择器, 第二个是回调函数element=>{}, element是第一个选择到的元素
$$eval相当于浏览器console中的$$, 而$$==document.querySelectorAll, , 必填参数第一个是选择器, 第二个是回调函数elements=>{}, elements是选择到的所有元素数组.
然后在console环境整理好所有内容, return出来就好了.
这一步真的so easy, 比scrapy+splash+scrapy_splash不要强太多.

但值得注意的一点是, 很多网站上都是用了jquery导致$被jquery占用后无法正常选择,这时候还是老老实实用回document.querySelector

神器 selectorgadget

用这个做选择器非常舒爽

代码结构优化

const playwright = require('playwright');

async function main() {
  const browser = await playwright.chromium.launch({
      headless: false // setting this to true will not run the UI
  });

  const page = await browser.newPage();
  await page.goto('https://so.eastmoney.com/news/s?keyword=%E5%90%9B%E5%AE%9E%E7%94%9F%E7%89%A9');
  await scraper(page)
  await scraper(page)

  await page.waitForTimeout(5000); // wait for 5 seconds
  await browser.close();
}

async function scraper(page){
  let titles = await page.$eval('body', scraperCb)
  console.log(titles)
  await page.waitForTimeout(500); // wait for 5 seconds
}

function scraperCb(body){
  let t = []

  function getTitles(){
    let ele = body.querySelectorAll('.news_item')
    for(e of ele){
      t.push({
        title: e.querySelector('.news_item_t a').text,
        link: e.querySelector('.news_item_t a').href,
        time: e.querySelector('.news_item_time').textContent,
      })
    }
  }

  getTitles()
  body.querySelector('.fydot~ a+ a').click()

  return t
}

main();

改成三个函数的结构:

  • main函数: 负责进入页面, 循环运行爬虫抓取下一页
  • scraper函数: 负责运行$eval函数, 获取页面返回值, 并点击下一页, 等待执行完毕.
  • scraperCb函数: 为$eval回调的函数, 内容在页面上下文运行, 其中的变量与爬虫主程序完全隔离.
    另外, scraper函数选择器改为body, 便于在回调函数中抓取并处理所有的元素

文章1链接: https://baijiahao.baidu.com/s?id=1728142987776616748&wfr=spider&for=pc
转发如下:
1:如果对方为个人,不能开具发票,可以让对方提供身份信息,通过税收园区自然人代开发票给企业。通过税收园区自然人代开发票,可以0.6%核定个人所得税,1%的增值税,总税率仅为1.66%,100万只需交1.66万的税。每个人代开额度限制为2499万,代开额度高,非常适合高额的发票代开。开票品目基本不限,服务类发票,材料发票,设备发票等等都可以开出。发票最快当天就能开出,出票后都会附有完税凭证,因此不用担心后期还会再补缴个税。
2:如果公司是因为采购,上游供货商不给开发票,那么公司可以选择在税收园区,注册一家个体户的采购中心,由个体户去向供货商进行采购,然后个体户再出售给公司,并给公司开具发票。
个体户注册在税收园区,可以享受核定征收,1.2%核定所得税,增值税为1%,附加税为0.06%,综合总税率仅为2.26%,100万开票只需交2.26万的税。另外个体户还可以开具1%的专票,受票方公司可以抵扣增值税,抵扣后实际纳税只有1.26%。不过个体户年开票有限制,因为享受核定征收的原因,个体户年开票不能超过500万,超过500万就会改为查账征收,个人经营所得税,就会按照5%—35%进行征收,因此个体户享受核定征收后,年开票一定不要超过500万。

https://dan-suciu.medium.com/web-scraping-in-node-js-top-7-best-tools-67f451fcfda3

python爬虫scrapy更新一直很频繁, 直到最近还在有更新, 可能因为如此, 所以很多网站都有针对性反爬措施.
上文推荐了7个基于node.js的爬虫. 下面按是否基于浏览器技术分类:

基于浏览器技术的爬虫

JSDom, 自实现的一个无头浏览器, 跟PhantomJs比较接近. 意图是纯JS实现Web标准. 5个月前更新.
Puppeteer, 谷歌开发的用于控制chrome的高级API
PlayWright, 据说是跟Puppeteer一个团队, 这个除了chrome外还可以控制firefox和safari, 目的是统一浏览器控制. 本意是浏览器自动化测试工具. 目前挂在微软名下, 到现在都还有更新. 也因为挂着微软,所以在vscode中有插件使用.
Nightmare, 基于ELectron, 可模拟用户操作. 本来是用来对无API网站跨站点自动化访问用的, 现在多用于自动化测试和爬虫. 三年前更新

基于HTTP Request的爬虫

Axios, 其实就是http request的优化, 当然也很好用
CheerIO, 用来做选择器, 语法和Jquery类似.
X-ray. 这是一个实际意义的爬虫, 和其他不同, 这个开发来就是做爬虫的. 但是好几年都不更新了.
Osmosis. 也是爬虫, 感觉和x-ray类似. 同样好几年不更新了.

在线爬虫服务

webscrapingapi, 本质是收费运营的, 但还是有一些免费的api.

对比

基于浏览器的爬虫和基于http request的爬虫区别在于, 前者会运行js, 做css渲染, 后者不会. 因此前者比较慢, 但接近或达到人工浏览, 能更好应对反爬, 后者速度快, 但可能应对反爬困难.

  1. 注意是kicad 6以上版本,否则不支持此功能.
  2. 需要直接打开pcb editor 6.0, 而不能先打开kicad6再从里面打开pcb editor. 否则里面的导入选项会消失
  3. 文件->导入->非Kicad电路板文件.