自动化代码审查工具
今天看到新闻说代码审查也可以自动化,搜索了一下确实还有不少工具。
https://wenku.baidu.com/view/8f28edd507a1b0717fd5360cba1aa81144318fa1.html
但似乎自动化代码审查只是lint吗? 我希望是AI智能一些的.
今天看到新闻说代码审查也可以自动化,搜索了一下确实还有不少工具。
https://wenku.baidu.com/view/8f28edd507a1b0717fd5360cba1aa81144318fa1.html
但似乎自动化代码审查只是lint吗? 我希望是AI智能一些的.
一件事情给人造成正负面情感影响, 将会促使人进行相应的行动, 因此具有预测性.
百度的API分析情感还是比较准确的.只是只能分析2048个字符, 换成汉字就只有1024个.
百度多实体情感倾向分析可以在文章中分析不同实体的情感倾向.目前邀测阶段. 可以分析娱乐/财经/体育类型, 输入包括标题和正文, 正文可达6000字节.
某一件事情第一次出现是新闻, 第二次就不是了. 所以怎么判断第二次说的和第一次的是同一件事情?
知乎上有个问题是问这个的, 答案有这么几种:
另一个思路, 从文章中抽取高频关键词, 看关键词是否有一致的.
scrapy直接用并不好用, 对于需要js渲染或动态dom的网页, scrapy爬不到.
这时候需要splash 中文文档 英文原档, 动态解析js并返回其最终渲染结果. splash实际上是一个docker image, 需要预先安装docker,然后拉取下来就可以用. 另外splash是基于lua的, 嗯, 感觉python+docker+lua,真是个缝合怪啊
介绍文章: https://www.bilibili.com/read/cv12375274
github上有一个scrapy-splash的项目.
安装scrapy, splash, scrapy-splash
pip install scrapy
docker pull scrapinghub/splash
docker run -p 8050:8050 -p 5023:5023 scrapinghub/splash
# 在上一步命令以后,命令行界面将挂起运行docker, 此时需要新建一个命令行继续运行后面的命令
pip install scrapy-splash
新建一个scrapy项目
scrapy startproject tutorial
修改其中的settings.py文件, 简便起见, 加入下面内容即可
SPLASH_URL = 'http://127.0.0.1:8050'
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
FEED_EXPORT_ENCODING = 'UTF-8'
SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
在spiders目录下, 新建一个爬虫文件, 比如爬虫名字叫df, 文件名字叫df_spider.py
import scrapy
from scrapy_splash import SplashRequest
class MySpider(scrapy.Spider):
name = 'df'
start_urls = ["http://example.com", "http://example.com/foo"]
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url, self.parse, args={'wait': 0.5})
def parse(self, response):
page = '1' # response.url.split("/")[-2]
filename = f'df-{page}.html'
with open(filename, 'wb') as f:
f.write(response.body)
项目目录下运行爬虫,会得到一个df-1.html的文件.
scrapy crawl df
查看这个文件是不是已经有js渲染, 如果还是没有渲染, 可增加爬虫文件中splash的wait时间, 上面设置的是0.5秒.
splash click一个元素的方式:
assert(splash:runjs('document.querySelector(".next a[href]").click()')) 正常来说是不支持的. 看了很多文章, 这一篇https://www.helpwire.app/blog/allow-multiple-remote-desktop-connections-windows-10/是讲的最好的.
里面提到了几种方式, 一种是用github项目RDP Wrapper, 我试过好像不起作用. 另一个是修改Termsrv.dll文件, 用到hex编辑器, 这个管用.
copy c:\Windows\System32\termsrv.dll termsrv.dll_backup
takeown /F c:\Windows\System32\termsrv.dll /A
icacls c:\Windows\System32\termsrv.dll /grant Administrators:F
Net stop TermService
接着在十六进制编辑器里面搜索39 81 3C 06 00 00 0F 84 XX XX XX XX, 替换为B8 00 01 00 00 89 81 38 06 00 00 90,然后运行Net start TermService或者重启就可以了
C语言宏#define中#,##,#@和\的用法: https://blog.csdn.net/yishizuofei/article/details/81022590
#define str "a" "b" // 相当于str是"ab"
#define x "+"
#define str2 "a" x "b" //相当于str2是"a+b"
void main(){
printf(str);
printf(str2);
}
//将打印出 aba+b 消费级产品是四种基础要素, 简称四要素. 这四个要素是消费市场对产品认可的关键. 包括:
杠杆要素是对基础要素组合成的产品形成杠杆加倍效果的. 是让消费者快速对产品形成认知的手段.
基础要素是1, 杠杆要素是后面的0. 基础要素做的不好, 杠杆越大越会反噬产品.
规模要素影响这款产品能形成什么样的销售规模.
创业项目或者小微企业, 先应该选择产品赛道. 选择赛道应该评估:
本着最小投入最大收益, 应从最重要的要素外观和功能起开始投入, 价格方面应有充裕余量, 不应切入以相同功能切入同质化严重的价格战市场.
切入顺序:
人们遇到比自己更优秀的人,要么丑化他,要么神话他。我觉得这是刻在基因里面的。基因要求更优秀的人塑造更好的基因环境。
可一旦神化了一个人,这个人就没有缺点了,他大概每天要做的事情就是正确的事情,别的事情他大概都不会做了。现在可以把这么一个人代入想象一下:这个人是不是要吃饭?要不要做爱?会不会放屁拉屎尿尿?
更重要的是,这个人真的不会说错话做错事吗?想想那些现在的和过去的伟大的人物,他们有这样那样的称号:伟人、圣贤、活佛、神……互联网时代还会叫某某爸爸。当然也感谢这个时代,信息每分每秒从地球各地传来,能让我们认识到,即使是做到顶级优秀的人,他也是在不断地犯错。乔布斯会犯错,他也出过失败的产品比如Lisa。马斯克也会犯错,他回顾自己在做Roadster的时候拿着创业团队的开发手板当做量产,还买了莲花汽车的油车底盘当电车底盘,可谓是一错再错。做领导到顶级的,美国总统应该算是其一了吧,那么川普和拜登满嘴跑火车的可就更多了。
既然商界神一样的人物乔布斯马斯克会犯错,既然政界顶级的大佬也会犯错,那么不如他们的大批大批人类————或许我该说所有人类————当然也会大把大把的犯错。推而广之,历史上的所有人类概莫能外。我们之所以没看到他们犯错,大概率是因为他们自己或者他们身边的人不让我们看到。既然家丑都不得外扬,圣贤伟人之错就更不能说了。还有,在他们作为圣贤伟人的时间和地域之内看不到错误,在这之外可就大把错误了。比如当朝皇上不会有错,后世评价可就未必了。朝鲜总书记在朝鲜不会有错,在朝鲜之外可是调侃对象了。
还有孔圣人,活着的时候没当成圣人,都没有国家接纳,那时候看起来肯定很多错。汉朝董仲舒“罢黜百家,独尊儒术”之后才成了圣人,此时孔子已经死了300多年。到了20世纪初期新文化运动,孔子被鲁迅为代表的一众人骂的狗血喷头,直到十年之劫时期还要打倒孔家店。到今日,我们又在全球到处开办孔子学院,又开始尊儒术,不知孔子他老人家的问题还说不说得了。
那么,圣贤伟人为什么可以成为圣贤伟人?有时候是运气,有时候是认准了方向与自己能力匹配坚持了下去(也即是准确预测了未来并投资了未来)。皇帝太子当了皇帝,必然有运气,投胎不对基本没戏。另外商界成功运气之外还是看综合预测能力,即使我小错不断,但大方向对了,而且还有能力比别人提前实现,那就能最后成功,成功之后成了神,就“没有错误了”。
所以,不能怕犯错,关键要做决策。方向要搞对,搞对就得坚持。
是需要解决以下矛盾:
办公室的办公环境喜欢用黑白或者蓝色等冷色调, (暖色调限于员工办公桌面)以及大量的玻璃隔断, 老板房间喜欢用棕红色木纹, 小到只摆放一套茶具, 达到整个房间用红木装修, 体现自己和公司的气派. 所有装饰横平竖直, 几乎看不到大圆角和曲线, 展示的是一种规矩. 人接触的大多数平面为硬表面, 办公椅千篇一律, 除了老板的大皮椅子, 大多数椅子采用绒布表面, 椅垫不厚. 不柔软就缺少温暖.
所以目标是既实用又温馨.
有舍才有得, 哪些家具应该被换掉?
从B站视频https://www.bilibili.com/video/BV1D34y1e7Yh?spm_id_from=333.337.search-card.all.click拆解两个蓝牙遥控器的方案中发现线索, 大款的遥控器采用的是Yichip 易兆微 的YC1039芯片.
从易兆微的官网上开到YC10xx系列主要用于防丢器,蓝牙自拍等方案.
除了1039外, YC1021是百度搜索时自动推荐的关键词, 有可能用得也很广泛.
搞了半天的PlayWright, 忽然想到这不应该有无代码的爬虫工具么? 比如叫数据采集器? Data Collector?
查了一下国内的火车头采集器和国外的有些采集器真的收费不菲, 然后就发现Chrome应用商店里有crx应用, 尝试了1个, 发现真香,哈哈.
名称: Instant Data Scraper 和 NoCoding Data Scraper - Easy Web Scraping
这里还有一篇文章https://zapier.com/blog/best-data-collection-apps/介绍了5个, 不过还没有细看.
尝试了Instant Data Scraper, 体验很好, 非常好用. 强烈推荐.
它的特点是可以对翻页表格数据和无限流数据进行爬取, 配置速度极快. 问题是不能爬取表格内的详情页.
基本使用方式: 点击try another table, 切换到数据区域后, 点击Locate "next" button, 选择下一页按钮, 如果是无限流页面,则选择无限流, 然后对列进行删减选择, 点击start crawling开始爬取.
| 网站 | 特殊爬取方式 |
|---|---|
| 淘宝 | 搜索关键词后, 需要把页面切换为列表显示方式. 可以爬到价格 |
| 京东 | 需要使用m.jd.com网址爬取, 无限流方式. 可以爬到价格 |
它就可以一级一级的深入到详情页爬取, 相对强大一些, 但配置起来也也要慢一些. 每一个要爬取的参数都要单独配置.
油猴里搜索scraper也有一些脚本. 有空可以体验.
讲得蛮好.
普惠金融, 可以抵押房产获取4%的贷款, 这样可以换完申请这种低息贷款. 等额本息先还的是利息, 超过1/3, 再还是一样的. 等额本金比较适合提交前还贷.注意:都没有计算封装, 如装气的气管, 装油的油箱, 装电池的封装.装电池的封装应该体积和重量还是比较高的.
另外, 实际还需要考虑生产该项能源所需要花费的能量或者成本, 下面也没有列出来.
| 能源 | 比重(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吧
用这个做选择器非常舒爽
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();
改成三个函数的结构:
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网站跨站点自动化访问用的, 现在多用于自动化测试和爬虫. 三年前更新
Axios, 其实就是http request的优化, 当然也很好用
CheerIO, 用来做选择器, 语法和Jquery类似.
X-ray. 这是一个实际意义的爬虫, 和其他不同, 这个开发来就是做爬虫的. 但是好几年都不更新了.
Osmosis. 也是爬虫, 感觉和x-ray类似. 同样好几年不更新了.
webscrapingapi, 本质是收费运营的, 但还是有一些免费的api.
基于浏览器的爬虫和基于http request的爬虫区别在于, 前者会运行js, 做css渲染, 后者不会. 因此前者比较慢, 但接近或达到人工浏览, 能更好应对反爬, 后者速度快, 但可能应对反爬困难.