一、知识解惑
有同学问:总会听到身边的大佬们谈到架构,感觉很高级,架构到底是一个什么样的东西呢?
首先,我认为架构就是如何组织代码,如何管理数据流。
1. 如何管理代码:你是把所有代码写在一个文件里面还是多个文件?哪种开发效率高?哪种运行效率高?哪种更容易维护?哪种更容易扩展?这几个要求,有时候会互相冲突。架构要平衡这种冲突,避免顾此失彼,尽量兼顾。如果只有几行代码,那你不需要考虑架构。
2. 如何管理数据流:数据是直接写进数据库还是先进消息队列再进数据库?每秒钟1000万个请求,怎么把请求划分到不同的服务器?你现在的基础设施能不能扛住这么大的并发量?如果扛不住,能不能让数据多走路,从而减少对现有设施的冲击?如果数据量低,并发量低,那你不需要考虑架构。
二、问题解答
1
请问下有没有工具或方法可以一次查询多个git项目(本地文件路径),提示哪些是已修改但没有提交的项目。
我自己用的是sourcetree
2
请教一下,我最近在做关于web自动化的项目。项目内容是:在海外社交购物平台做自动注册、及其他操作。(Twitter、Facebook、Amazon等)、我看到网上目前的web自动化框架有selenium、Pyppeteer。我应该学习哪些知识,来完成Web自动化,不会被平台监测到是程序自动化。
不要用selenium了。它能被识别的特征太多了,无论怎么藏都躲不过Facebook。你可以试一试puppeteer或者playwright。他们相对好一些,但也并非没有特征。你在我公众号搜索stealth就能找到它们的特征和解决方案。
但最终极的解决方案是自己编译chromium,难度极高,需要精通C 。但这样你可以把所有特征全部抹掉,真正实现以假乱真。
3
playwright怎么判断页面上有没有某个元素呢?如果判断有某个元素就执行相应的操作,没有就下一步。我用page.wait_for_selector,page.query_selector,page.locator都会出现超时错误,是我用的不对,还是必须要用try语句呢?
用try捕获timeout异常就好了
4
我是爬虫新手,最近在做一个电商爬虫有个问题想要请教一下。目标网站的商品数量大约在20万左右,我想要采集每个商品的详细信息,比如名称,价格,购买量等等。这些详细信息我希望要每天更新(重新爬取),请问应该怎样设计数据库的表比较合理?
目前的做法是把所有商品的详细信息放入一个表中,按录入时间来区分,这样就可以按照时间段来查询商品的价格走势。但随着时间的推移,这个表肯定会变得异常臃肿,查询肯定也会变慢,所以想问一下数据库怎么样设计才合理。
需求:
- 尽可能节省成本
- 能够按时间段查询商品的详细信息,时间跨度半年以上
- 只使用MYSQL
把不变的数据写到一个表里面A表里面,然后把每天更新的数据,以周为单位写到B表里面。B表带上周数,例如第20周的数据b_w20表。第21周的数据b_w21。所有的表都有一个字段叫做item_id,也就是商品id,用来join。
5
当MySQL表的大小增加到多少之后才需要考虑扩容或者迁移的问题?
我认为超过100w就应该分表。
6
金融风控场景,需要存储,并计算用户安装列表,通讯录,短信等数据。同时有不少黑产和中介不停作弊试探规则阈值。他们具有相似的数据特征,如通讯录,安装列表等。新用户来了之后,这些字符串集合需要做对比,如通讯录。感觉这个类似于一个全文检索的功能。方便存储,同时能快速计算出来最相似的top集合,并给出(如jaccard)相似度。这种应该怎么做?感觉用mongodb挺合适的,但是不太懂mongodb的全文索引,聚合,和相似度的算法。
首先,表明一下我的态度:不应该明文存通讯录和用户的安装列表。存了就是令人憎恨的国产流氓软件。以任何理由强制用户上传通讯录的App都是垃圾。
然后说说你的问题。目前有通讯录生成器,可以随机生成名字和手机号。因此通讯录作为特征是不准确的。
你提到的多对多查询,不一定要用Mongodb,关键是匹配算法。实际上你用有限自动机做比较好,它能实现快速的多对多匹配。软件列表,其实就是n个软件名字。是一个数组。新用户来了以后,他的软件列表也是数组。你用集合求交集就可以了。
对与通讯录。手机号就是11位的字符串而已,其实你也可以用集合来做交集。
对于短信,你可以计算simhash。但是短文的sim hash可能不准确,也许用词向量做余弦相似度会更好一些。
至于你说有些库在新服务器上安装不了。那你在老服务器是怎么安装的?难道新老服务器的系统不一样?有一些第三方库依赖一些系统软件,这些系统软件需要使用apt提前安装。
7
分享一个小技巧,当你要在MongoDB里面查询所有『a字段的数据大于b字段的数据』的值的时候,可以这样写:
col.find({'$expr': {'$gt': ['$a', '$b']}})
最近我在做一个爬虫有个疑问不知道咋弄,爬取的数据用web做数据展示,爬虫部分想分离到客户自己机器上。数据汇总到web上。然后现在想在web上去控制。爬虫的启动。停止,客户端可以在web上获取爬取任务,然后跑回传。获取任务的用的get post,客服端那边不能直接链接数据库。所以在纠结有啥好的解决办法。思路没,或者是一些可以参考的实例这样。
中间搭建一个Redis,爬虫while True从Redis里面取数据爬。网页把任务发送到Redis中。如果Redis都不能用,那你网页做一个页面,里面是任务的JSON。爬虫就一直监控这个页面来取任务。你自己再做一个post接口,爬虫爬完的数据post提交到你的网站里面。
主要是不想爬虫那边直接链接数据库。所以才会纠结。这俩个接口都做好了。就是任务频率太大。一直get,现在就是想找个方法来维护爬虫的状态,就停止。启动,自动获取任务。
如果你的问题是:任务频率不高,但是由于爬虫不知道什么时候发布任务,需要高频率访问发布任务的页面。那么有两个方法:
1. 每分钟检查一次,你以为频率很高,但其实并不高。每天才1440次。这个频率非常小,不会带来任何负担。
2. 你可以使用长轮询。
一二线大厂在职员工
十多年码龄的编程老鸟
国内外高校在读学生
中小学刚刚入门的新人