macOS Catalina 10.15 升级 mongodb-community 4.2 报错及解决方案

每次系统大升级,都会有些生产力工具出问题,所以这次Mac升到macOS Catalina 10.15(19A583),心里早有些准备。 果然,MongoDB启动不了了。 莫不是因为系统升级到了macOS 10.15,不兼容MongoDB?那升级软件呗。 brew update && brew upgrade && brew cleanup 升不动呀。 原来因为种种纠葛(这又是另外一篇故事了),MongoDB不再开源,故HomeBrew已将其移出。具体可以看这里:https://github.com/Homebrew/homebrew-core/pull/43770 那怎么办? 参考官方给出的解决方案:https://github.com/mongodb/homebrew-brew 先卸载老版本: brew services stop mongodb brew uninstall mongodb 再安装mongodb-community: brew tap mongodb/brew brew install mongodb-community 启动: brew services start mongodb-community 命令一气呵成,这下成了吧? 哈? 哈??? 再看看mongo是否启动了。以下两条命令都可以。 nc -zvv localhost 27017 ps -ax | grep mongo $ nc -zvv localhost 27017 […]

Python queue 类 实现元素唯一性的方法

queue 是 python 内置的轻量级的多生产者、多消费者消息队列模块,小巧玲珑,安全好用。 queue 模块好是好,就是入队时不支持检测元素的唯一性。比如我的爬虫有一组URL,或者ID,重复的数据就没必要再放入队列。如果在多线程中直接操作,过程不可控,很容易出问题。 查询资料,CSDN 上有解决方案(原文点这),通过修改 queue 模块的源代码,在put方法中增加一个unique参数,依据此参数是否为 True ,在底层的 deque 中判断将要加入的元素是否存在,以此实现检测元素唯一性的功能。 试之,可行。 具体过程如下: 首先找到 python 内置函数 queue 模块的位置: 位置如下: 通过以上路径,找到 queue.py 文件 ,修改以下代码: def put(self, item, block=True, timeout=None, unique=False): with self.not_full: # —– 以下三行为新增代码 —–# if unique: if item in self.queue: return # —– 新增代码结束 —–# if self.maxsize > 0: if not […]

www.miitbeian.gov.cn 网站打不开?那是别个换域名了

最近发现,http://www.miitbeian.gov.cn/ 网站打不开。 http://www.miibeian.gov.cn/ 也打不开。 咋回事? 最近很多gov网站都在整改规范网站域名,ICP备案系统也不例外。 其网站具体通知如下: 关于调整“工业和信息化部 ICP/IP 地址/域名信息备案管理系统” 域名的公告 按照国务院办公厅要求,“工业和信息化部 ICP/IP 地址/域名信息备案管理系统”域名调整为 “beian.miit.gov.cn”。 “miitbeian.gov.cn”、“miibeian.gov.cn”等域名自 2019 年 4 月 25 日起停止使用。 附件: 调整后各省(区、市)系统域名列表 工业和信息化部信息通信管理局 2019 年 4 月 17 日 域名规范是好事儿啊,看着层次清晰,一目了然。 还没有改的同志,赶紧将网站底部的域名指向 http://beian.miit.gov.cn 吧。 话说,他自家网站底部都还没改呢。/偷笑

Mac Python3 Matplotlib中文方框乱码解决方案

在macOS Mojave 10.14上,使用Python 3.7的绘图库Matplotlib 3,当输出中文时遇到方框形乱码。 Google了一下,找到不少方法,有安装字体的,有更改配置的,有自己写方法的。看了一下这些方法,要么太复杂,要么升级后还要重新弄,都不太满意。 继续搜索发现,造成Matplotlib中文乱码是因为Mac下没有SimHei字体库,需要下载SimHei字体,再配置Matplotlib。 如果我们找到Mac里支持中文的字体,然后在Matplotlib里设置为默认,也就不需要再下载了。 运行以上代码,可以发现Mac上有很多字体可供使用,我们找到Arial Unicode MS,设置为Matplotlib的默认字体即可。 我们更改Matplotlib的默认字体: 通过以上两行代码,不用其他任何修改,即可正常显示中文。

解决iOS系统安装Charles证书后,仍然抓不到HTTPS请求的问题

最近在对某手机应用进行抓包分析,Mac端和iOS端设备已经安装好了Charles证书,但iOS设备仍然无法访问https地址。这是什么原因呢? 1、首先排除电脑端的证书信任问题; 2、排除手机端证书信任问题; 确认手机证书安装有没问题:系统设置-通用-描述文件与设备管理 确认手机证书信任有没问题:系统设置-关于手机-证书信任设置 最后确认,是手机端没有信任证书导致的问题。设置为信任之后,就可以抓取https请求了。

wordpress自定义404页面无法显示的解决办法

如果wordpress主题有自定义的404页面,但有时仍返回nginx自带的404 Not Found,这是为什么? 首先,排查是否关闭了nginx的跳转。 找到nginx配置文件中的以下两行: 删除,或者在每行前面加上#号注释掉,重启nginx。 如此时仍有部分错误链接返回nginx自带的404 Not Found,则应考虑wordpress并未接管全部访问,即wordpress不处理此部分链接,直接交由服务器程序处理,才会出现以上情况。 此时,启用伪静态可以解决问题。 找到wordpress设置-固定链接,将朴素型,改成其他任意一种形式。 然后在nginx配置中加入以下代码: 保存,重启,应该可以解决wordpress自定义404页面无法显示的问题。

python爬虫抓取易方达指数基金网数据的一些实践

易方达指数基金网(http://www.indexfunds.com.cn)是中国最早的指数和指数基金研究网站,2012年8月份就上线了。 易方达指数基金网使用的是wind的授权数据,其免费、简洁、强大,是深受保险、券商、社保等机构投资者,基金代销机构的理财经理,基金持有人,指数领域从业者,财经记者,研究分析人员等各路人马好评的神器。 我们怎么用python爬虫把有用的公开数据抓取下来,用来自己研究呢? 我们先来看看这个网站。选择「指数分区」。 以「沪深300」指数基金为例,曲线图上展示的数据有:指数名称、指数代码、某日价格、较前日涨跌、日期,这就是我们想要的数据。 怎么得到我们想要的数据呢? 在调试工具的Network里找到文件 http://static.indexfunds.com.cn/market/ifs/000300.SH_cy_nv.js ,这是2018年往后的数据,其数据格式为: http://static.indexfunds.com.cn/market/his/ifs/000300.SH_all_nv.js 这是基金成立之日起,至2017年年底的数据。两个文件的内容相加,即为全部数据。 我们观察数据‘20180102_4087.4012_0.014028’,很明显,「20180102」为日期,「4087.4012」为价格,「0.014028」为涨跌。 那么,我们只需要找到指数基金对应的文件,就可以解构出所需的数据了。 核心代码: #传入url,获取指数详情 def getFundInfo(url): fundinfo=[] headers = { ‘User-Agent’: random.choice(USER_AGENTS), } response = requests.request(“GET”, url, headers=headers) s=response.text.split(‘[‘)[-1]#字符串分割,将=号后面的内容保存下来 s = s.split(‘]’)[0] s=s.replace(“‘”, “”)#去掉字符串本身的引号 data = s.split(‘,’)#按逗号将str数据转为list for i in data: time=i.split(‘_’)[0]#时间 price=i.split(‘_’)[1]#价格 change=i.split(‘_’)[-1]#涨跌 fundinfo.append({‘时间’:time,’数值’:price,’涨跌’:change }) return fundinfo 还有两个问题,怎么获取指数基金对应的文件? 200多个指数基金代码,又怎么获取? 第一个问题,很简单,可以这样构造文件的url地址: url1 = ‘http://static.indexfunds.com.cn/market/his/ifs/’ […]

Python爬虫抓取透明房产网房源信息

闲来无事,想看看成都透明房产网(esf.cdfgj.gov.cn)的房源信息。 成都透明房产网的主办单位是成都房地产信息档案中心(成都市城乡房产管理局直属单位),运营机构和技术支持是成都房联电子信息有限公司。成都透明房产网是房管局的公示平台,其产权性质、备案价格等信息相对可靠,但更新较慢。 可以看到,网页代码的结构还是比较简单,哪些信息是有价值的呢? 最有价值的肯定是房源的均价和总价了,其他信息比如区位、面积等其次。 下面直接开干,爬虫的大概思路是,先获取总页码,开多线程,取出页码获取房源,存储。 以下为主要部分源码: #获取成都透明房产网信息 def get_cdfgj(page): url = “http://esf.cdfgj.gov.cn/search” querystring = {“page”:page} headers = { ‘Accept’: “text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8”, ‘Accept-Encoding’: “gzip, deflate”, ‘Accept-Language’: “zh-CN,zh;q=0.9,zh-TW;q=0.8”, ‘Cache-Control’: “no-cache”, ‘Connection’: “keep-alive”, ‘Host’: “esf.cdfgj.gov.cn”, ‘Upgrade-Insecure-Requests’: “1”, ‘User-Agent’: random.choice(USER_AGENTS), ‘page’: str(page), } try: response = requests.request(“GET”, url, headers=headers, params=querystring) except: print(‘无法打开链接’) return [] response.encoding = response.apparent_encoding # 编码 soup […]

Python程序给宝宝起名?

出于好玩,想用Python程序给小孩起名。 思路是这样的,先穷举出全部常用汉字,生成单字名及双字名,将生成的名字放到「姓名测试网站」进行打分,按得分对名字进行排序,以便筛选。 具体实施起来有几个关键点: 1、常用汉字的生成 python3生成汉字,这儿有两种思路,一种是生成Unicode编码的全部汉字,共计20927个。 ming_list=[] for i in range(0x4e00, 0x9fbf): ming=chr(i) 另一种是生成GBK2312编码的常用汉字,共计6763个。 ming_list=[] for i in range(0x4e00, 0x9fbf): ming=chr(i) try: ming_gb = ming.encode(‘gb2312’) # 汉字转 gb2312 ming_list.append(ming) except: pass 这里采用第二种方式,过滤掉不常用的生僻字。 2、提升程序效率 此处用多线程解决问题已经不好用了,6763*6763有45738169种组合,每秒完成3次请求,大概需要45738169/3/60/60/24=176.46天。 这么慢肯定接受不了,这里我们就要用到rabbitMQ和pika了。核心思想是,主程序只管分派任务,将45738169个名字分发下去,其他机器(窗口)从任务池里取任务并执行。这种思路的好处是,理论上机器可以无限增加,工作效率与机器数量成正比,各机器之间互不影响,某机器掉线不影响整体。 核心代码: 任务分发端: import pika print(‘send….start….’) for i in range(1000): connection = pika.BlockingConnection(pika.ConnectionParameters(‘localhost’))#任务分发 channel = connection.channel() channel.queue_declare(queue=’ming’,durable=True) channel.basic_publish(exchange=”, routing_key=’ming’, body=str(i), properties=pika.BasicProperties( delivery_mode=2, […]