北京、上海房租大幅上涨了吗?


作者:刘言
来源:财经十一人(ID:caijingEleven)

“不是说大批打工人撤离上海吗?为何租金每月还上涨了2000多。”

“今年毕业季本来工作就难找,都是一边找工作一边租房子,一线城市都不给我们留下的机会了吗?”

最近,波动的房租与租客预期之间的偏差,把房租话题吵上了社交网络热搜。

不少人认为这是一场“房东、中介、长租机构纷纷参与的合谋,他们联手炒高了房价。”

但诸葛找房研究院数据显示,2022年5月,一线城市平均租金为86.66元/平方米/月,环比上涨0.39%,同比上涨4.03%。并没有网上渲染的10%、20%,甚至更高。

虽然随着一线城市逐渐摆脱疫情笼罩,进入复工复产阶段,上海、北京、广州等地房租开始率先反弹,但整体反弹幅度低于去年同期。以上海为例,多个机构数据显示,去年同期租金同比涨幅近10%。

综合多方市场数据观察,租赁市场整体在温和回暖,租金虽然有波动,但远低于去年同期水平。且相较传统普租模式(个人房东直租,中介代理机构主要为链家、我爱我家等),长租机构(机构出租,包括自如、相寓、泊寓等)的涨幅并不高。

为何这波一线城市租金波动,导致了个人感官和市场实际情况反差?

哪种租赁模式涨幅较高,波动较大?

搞清楚这些问题,并实施有针对性的解决方案,将更有利于一线城市保持合理的租金价格,从而留住人才,加快复工复产进度。

01

租房市场回暖

进入今年6月份,疫情后市场复苏叠加毕业季租房热点,市场逐渐迎来复工复产。根据自如研究院数据显示,6月1日上海复工复产,租赁市场日均成交量已基本恢复至去年同期水平。同期,北京租赁市场需求逐步释放,尤其是长租市场成交量,环比增长超过30%。

盘古智库高级研究员江瀚认为,这段时间一线城市上海、北京租房热度较高是多方面因素叠加而成:

一是,从租房市场周期来看,4月-6月份本就是租房市场传统旺季,大量大学毕业生步入社会,租房市场就会逐渐出现需求增加现象;
二是,三年疫情下,催生了不少新的租赁需求,更多房客宁愿多花钱,也想换住更有品质的小区,或从群租状态转为单人租住等,这直接导致租房价格上涨,高品质房源更受欢迎;
三是,上海、北京疫情后逐步复工复产,压抑了两个月的找房换房需求被集中释放。

克而瑞数据显示,今年5月,上海个人房源租金为102.51元/平方米/月,排在55城之首,也是唯一一个每平米月租金破百元的城市;环比上涨6%,涨幅排在55城前三。

58同城、安居客数据显示,今年 3月北京平均租金为6372元/月,5月北京平均租金继续上涨为6557元/套/月。

诸葛找房研究院数据显示,今年5月,一线城市平均租金为86.66元/平方米/月,同比上涨4.03%。

而我爱我家研究院2021年上半年数据显示,重点监测12城,上海整租平米租金最高,同比方面,上海、北京、南京、成都等6城平米租金上涨,上海涨幅较高接近10%。据克而瑞2021年发布数据,上海市2021年租金呈现连续上涨趋势,7月全市个人房源租金价格同比上涨16.45%。

可见,上海、北京此轮房租虽然环比上涨多月,但同比波动不及去年。

从数据反馈看,上海、北京房租上涨幅度较大的房子大多来自核心地段的普租房源。

北京、上海房租大幅上涨了吗?

从各区域来看,4月份,上海全市近六成区域租金出现上涨,其中黄浦区租金涨幅最大,上涨15.18%。

但同期上海集中式长租租金只出现微涨。5月,租金水平为162.55元/平方米/月,同比去年同期还下降了1.7个百分点。

在北京也是如此。综合头部房屋中介公司数据可知,上地、中关村、望京等租房热门地区,长租机构租金波动幅度明显低于普租。

根据《中国建设报》综合市场情况调查发现,虽然上海、北京的租房市场受疫情影响,但长租机构租金和成交量都比较平稳。今年第二季度,自如全国租金水平保持整体平稳,环比波动幅度均在±2%范围内。当前客户续约价格同比去年同期,平均涨幅在2.5%-3%,这一幅度环比、同比数据均低于一线城市普租价格在过去一年的涨幅。

北京、上海房租大幅上涨了吗?

以北京望京地区望京路3号院租金波动为例。从2021年2月至2022年6月,普租房源累计变化为上涨32.4%,自如房源累计变化为上涨4.3%。其中,今年3月以来,该小区普租房源累计上涨7.5%,自如房源价格变化率为2.2%。

据悉,目前住房租赁市场中,约有30%房源由个人房东自行出租,俗称手拉手成交;30%的房源通过品牌房地产经纪公司,如我爱我家、链家等挂牌出租;30%的房源在一些规模较小、区域性的住房租赁中介公司代理出租。这三类加一起,基本上就占据了90%以上的租赁市场的供给。

北京房地产中介行业协会秘书长赵庆祥认为,目前,一线城市租金并没有普涨,各区域租金有涨有跌,整体波动低于去年同期,机构化长租房租金波动幅度低于普租。而且机构运营的长租房市场占比还不高,当下消费者选择也很多样,长租机构尚不具备操控市场价格、哄抬租金整体上涨的能力。

02
定价逻辑决定租金波动高低

为何长租或者说机构出租会比普租价格波动小?背后原因主要是个人房东与机构平台的运营逻辑不同。

目前,个人房东和中介等通常采用对比定价法。一般来说,出租房子前,房东会把市场上现有的周边的同小区、同户型的房子价格对比一遍,再根据自己装修配套水平和心理预期定价,同时还预留出来与租客讨价还价的空间。

个人房东更依赖当下的客源情况和价格反馈,同时参考价格信息的来源比较窄,加上每一位房东自身认知偏差,往往对市场冷热有着主观但也片面的判断,因此定价存在天然不稳定性。他们相对更容易受到市场风吹草动的影响。

据悉,上海四五月份部分地区房租上涨过高,部分原因是复工复产后,房东想弥补损失。

自如数据智能中心首席科学家张宇宙博士认为,机构出租更关注其管理房源在长委托周期内、全部房源整体的收益率,即他们追求的是长期、稳定的高出租率,而不是为了一时的高租金,导致出租率降低。

简单来说,机构出租的运行逻辑中,规模>出租率>租金价格。

以自如为例,2022年新的业主委托模式“增益租”推出已近两年,今年一季度增益租业主委托量同比涨了400%。

增益租即自如采用无差价、无空置期、收益有保底模式,房东将房屋委托给自如长期运营,自如对房源进行标准化配置改造再转租出去。改造费(装修费)由房东负责,自如同房东签订1年-8年不等合同。

改造后的房屋品质会显著增长,房屋价值也有提升,不管市场房价涨跌,及房源是否出租出去,自如都会在合同期内付房东保底房租,而如果市场行情好,超出保底部分的租金收益,自如和房东分成。

张宇宙博士透露,这种运营模式有两个经营要素,一是,要有足够的规模;二是,在规模的基础上做到足够高的出租率。

规模方面,自如已处于稳定期,因此出租率对自如有着最高的优先级。只要一天房子没出租,平台就只付钱不收钱,出租率是关键指标。如一套2000元的房子租金涨了3%,自如每月多收60元,一年多收700元左右,但如果从日租金来看,房子空置3-5天,涨出来的钱就几乎没了。“所以会优先保障价格合理。”

自如目前已经把出租时效较传统普租的45天缩短到15天。

对自如来讲,何谓“价格合理”?据介绍,自如通过四层价值定价法来判定一套房子的核心价格。

最底层是区位价值,如一套房子在北京国贸和在天通苑肯定租金基础上有差异。

第二是楼盘价值,如在同一区域,2005年建的小区跟30年房龄以上的小区,容积率、绿化率、物业管理水平都不一样,楼盘小区本身属性的差异带来价值区别。

第三是房子本身,如房子面积、朝向、楼层等,这是到房子属性上的价值。最基本的,面积大的肯定要贵一点,面积小的要便宜点。

第四层是装修价值,装修老旧肯定不如精装修的价值高。

此外,市场上已经成交的价格以及销售周期,也会成为自如等长租机构判定一个特定房子定价是否合理的依据。

总之,张宇宙认为,要在保证出租率足够高的前提下,再去尽量吻合市场的趋势。“但租金与出租率需要相互平衡,所以我们更愿意以合理的价格把房子租给客户。”

据悉,基于过去十年的楼盘字典的数据积累,自如价值定价基础算法对全国十个城市经营范围内楼盘的覆盖率超过90%,平均每日运算学习超过200万次。目前自如整体入住率超90%,北京、上海作为重点一线城市,入住率均长年高于90%。客户续约率方面,目前,自如整体续约率环比增长近10%,同比增长超过16%。

03
稳租金 保就业

业内普遍预计,在疫情防控总体向好的大趋势下,预计6、7月份,住房租赁市场整体仍将持续回暖,尤其是对人才吸引力较强的一线、新一线城市以及都市圈核心城市、省会城市等。

这意味着只要疫情稳定,未来,热门城市房租仍有发展空间。为了缓解年轻人就业、生活焦虑,稳定租房市场,需要监管层、行业协会短期调控和行业长期提高匹配效率、保障供给。

6月22日,北京房地产中介行业协会号召全市房屋租赁中介机构为新一届毕业生提供适配租赁房源和租房优惠服务。

对此,自如、贝壳找房、链家、我爱我家等20家代表性企业计划筹集约9万套(间)房源供高校毕业生选择,并承诺提供免押金、减租金和佣金打折等优惠。

长期来看,赵庆祥分析道,住房租赁是需要精细化运营的行业,凭借资本光环出圈只是短暂,长期仍要回归本源。依靠精细运营和专业服务实现“有帐可算”,就不怕弄脏双手去做微利如毛巾挤水的事情。与其说规模增长,不如说提供更有效、匹配的供给。

在租房市场上一直存在产品错配、服务错配、品质错配等问题。发展的问题,需要通过商业模式和服务的创新来解决。

为了保障供给,解决城市新市民、青年人租房问题,2022年以来,保障性租赁住房建设迅速落地。自2021年6月《国务院办公厅关于加快发展保障性租赁住房的意见》印发后至今,北京、上海、重庆、天津等约13个城市陆续发布了实施细则。

根据这些实施细则,“十四五”(2021-2025)期间,北京、上海、广州、深圳计划新增保租房分别为40万套(含满足条件的单间)、47万套(间)、60万套(间)、40万套(间),其中,北京保租房供应占新增住房供应总量的40%,其它三城均占新增住房供应总量的45%左右。

增加保障房供给是一项系统工程,上百万套的保租房建设也需要市场化力量参与建设、运营。据悉,目前,万科、华润、自如、贝壳等房地产行业头部企业已经参与到保租房建设中。

转自:https://mp.weixin.qq.com/s/xRSnzZmnvNiohiH8iBsXEw

瑞金出台“10条”房地产新政!

瑞金房地产新政策出台啦!

共10条

条条真金白银

不止省一点点

重磅!瑞金出台“10条”房地产新政!

房正当时

快来看看吧!

重磅!瑞金出台“10条”房地产新政!

《瑞金市促进房地产业良性循环和健康发展若干措施》(以下简称《若干措施》)于2022年6月10日市七届人民政府第12次常务会议、2022年6月26日市委常委会议审议通过,自发布之日起执行。 

出台背景

为贯彻落实上级决策部署和工作要求,我市从实际出发,完善房地产政策,支持刚性和改善性住房需求,促进我市房地产业良性循环和健康发展,6月27日正式印发了《瑞金市促进房地产业良性循环和健康发展若干措施》。

主要内容

《若干措施》共十条,分别从给予居住性需求购房补贴和契税补贴、给予人才购房补贴、给予购买商铺契税补贴、优化个人住房贷款服务、适度调整预售资金监管比例、降低商品房预售形象进度要求、缓解开发企业资金压力、适当延期缴纳有关规费、鼓励本市建筑企业承接房地产项目、大力推广装配式建筑等10个方面出台了相关政策措施,一方面鼓励房地产企业投资开发,另一方面支持居民合理住房需求。有关支持居民合理住房需求的政策主要有:

居住性需求实施购房和契税补贴

1.对本文件出台之日起至2022年12月31日期间在瑞金购买(购房时间以网签《赣州市商品房买卖合同》时间为准,下同)144平方米以下新建商品住宅(不含二手房)且在2023年3月31日前缴清契税的购房户,给予购房补贴和契税补贴。属购买首套房的,由市财政按商品住房面积给予购房户200元/平方米购房补贴;属购买改善性住房的,由市财政按商品住房面积给予购房户100元/平方米购房补贴。契税实行先征后补,在2022年9月30日前购房的由市财政给予购房户60%契税补贴,在2022年10月1日至12月31日购房的由市财政给予购房户40%契税补贴。房屋征迁选择产权置换的购房户除外。

2.对本文件出台之日起至2022年12月31日期间在瑞金首次购买商品住宅的全日制博士、硕士研究生(含高级技师),属在瑞金创业且稳定经营2年以上或在瑞金就业且与企业(不含行政机关、事业单位和国有企业)签订3年以上劳动合同,并在瑞金缴纳社保满2年以上的,由市财政分别给予10万元、6万元人才购房补贴;全日制博士、硕士研究生(含高级技师),属在本市行政机关、事业单位和国有企业工作2年以上的,由市财政分别给予6万元、4万元人才购房补贴。享受了人才购房补贴政策不同时享受居住性需求购房补贴和契税财政补贴政策,购房者可按就高不就低的原则自行选择补贴种类。

3.对本文件出台之日起至2022年12月31日期间,在瑞金购买商铺并在2023年3月31日前缴清契税的,由市财政给予购买商铺业主50%契税补贴。

改善型购房贷款执行首套房政策

4.对拥有一套住房并已结清购房贷款的家庭,为改善居住条件再次申请贷款购买瑞金范围内144平方米以下新建商品住宅(不含二手房),且符合我市贷款使用条件的,公积金和商业性个人住房贷款均执行首套房贷款政策,首付最低比例按20%,二套房最低按30%执行。

引导商业性个人住房住房贷款利率下行

5.首套住房商业性个人住房贷款利率下限调整为不低于相应期限贷款市场报价利率减20个基点,具体按上级商业性住房贷款政策执行。

提高公积金贷款最高额度

6.双缴存职工申请公积金贷款的,最高额度由40万元提高到50万元

执行说明

以上政策措施除有明确执行期限外,其他政策自发布之日起执行,至2022年12月31日止。执行期间如遇上级政策调整,以上级政策为准。

办理流程及相关须知

购房消费(契税)补贴办理流程

符合条件的购房对象到市住建局市场监管股或开发企业售楼部领取《购房消费(契税)补贴申请表》并据实填写(一式四份)→购房对象申请资料经房地产开发企业审核后,递交市住建局和相关责任单位审核→市住建局和相关责任单位审核后,将申请资料提交市财政局审批→市财政局于审批通过后将购房消费(契税)补贴拨至申请人个人账户。

申请资料

>

01

(1)《购房消费(契税)补贴申请表》(收原件);

>

02

(2)申请人与共同申请人身份证或户口本、结婚证或未婚证(审核原件、收复印件);

>

03

(3)毕业证、社保证明(符合人才购房补贴的提供)(审核原件、收复印件);

>

04

(4)《商品房买卖合同》(审核原件、收复印件);

>

05

(5)契税完税凭证、不动产销售发票(审核原件、收复印件);

>

06

(6)购房对象银行储蓄账号(卡号)(收复印件)。

受理地点

瑞金市象湖镇瑞明路市住建局市场监管股(407办公室),联系电话:0797—2530787。


来源:瑞金住建
实习编辑:刘莉 
编审:黄书文
审核:邓旋 谢春明
总监:刘春华 胡文彬

转自:https://mp.weixin.qq.com/s/MVRZAPlLbQ8Mt7uybVLzkg

美国又想画大饼砸中国?

作者丨庄主
来源丨米筐投资(ID:mikuangtouzi)
01

 

《孙子兵法》虚实篇有云:避实击虚,致人而不致于人。
就是说:要打击敌人薄弱的方面,而不要在敌人最强的部分跟人家硬刚。你得牵着对方的鼻子走,而不能处处受制于人,在对方预设的战场作战。
这是多伟大的智慧啊!
可惜就是有人不听劝,在基建项目上,想跟中国这个世界著名“基建狂魔”掰掰腕子。
正在德国举行的G7会议宣称,将在5年内筹集6000亿美元,为发展中国家提供发展基础设施的资金。

美国又想画大饼砸中国?
欧洲媒体自己都说,这一宣称虽然从头到尾都没有提中国,但所有人都知道这就是奔着中国“一带一路”计划去的。
拜登一边在国内通胀问题上拖泥带水的敷衍耶伦,说“我还在做决定”,一边却跑到G7峰会上,果断的扔出了名为“全球基础设施和投资伙伴关系”的“新”计划。
并宣称G7将在5年内,向发展中国家提供6000亿美元的基建贷款,用于让发展中国家亲眼看到与民主国家合作的具体好处。
而美国也将在5年内动员2000亿美元的资金,用于投入这一计划。
并信誓旦旦的保证,这一次的“全球基础设施和投资伙伴关系”,绝对不是把去年那个“’重建更美好世界计划’换皮改名版”。

毕竟那玩意儿已经被喷成了筛子,尴尬到连西方媒体自己都不愿意提及。

美国又想画大饼砸中国?
因为实在是太尴尬了,‘重建更美好世界’计划去年叫的是真叫一个凶,但结果是基本没人鸟他。

执行大约一年以来,美国政府对全球基建的投入加起来只有微不足道的600万美元。”
实话说……这个数加起来,还没马斯克花在“窜天猴”上的钱多……

真的!人生最尴尬的事情,不是所有人都反对你,而是你振臂一呼,结果没人鸟你……
02

 

上一次的“重建美好世界”计划,虽然玩成了一个尴尬的笑话,响应者寥寥无几,但至少也算是甩出去几百万美元,至少不能算是纯粹的“空喊口号不掏钱”。
可能是吸收了上次的教训,这一次提到掏钱的时候,拜登的发言就很灵性了。
当欧盟委员会主席冯德莱恩跟进表态:欧盟将为该计划筹集3000亿欧元之后。
拜登接了一句:美国也将在5年内动员2000亿美元的资金。
“动员”这个词真的很灵性啊!
“筹集”的钱是一定要掏的,但是“动员”……动员谁来掏?能不能动员的起来?这可就不好说了。
美国现在的通胀和政府财政状况,一边支援着乌克兰那边的烂泥坑,一边还要喂饱国内的各路老爷,还能不能再掏出这么多钱来,真的值得深思。
而拜登的计划也很明显,这2000亿美元,美国政府只会承担很小一部分,绝大部分需要动员私人投资。

美国又想画大饼砸中国?
一边忽悠着盟友冲上来硬刚中国,一边自己慢慢动员私人投资……
翻译成人话就是:嗯……我最近不舒服,动不得手,兄弟们先上,我负责摇人。
站在其他6家的角度上说,你拜登要是能真摇来人,也算不辜负兄弟们跳出来扛这一顿打,但是你丫最后摇了几个“小学生”来是干嘛滴?
话说,这私人投资要在国家资本为主体的“狼人局”里,硬刚世界第一基建狂魔,可不就是“小学生VS泰森”的节奏么?
况且欧盟现在还陷在你挖的乌克兰血坑里没爬出来呢,你这新坑就挖好了?
不知道为什么,虽然话说是拉着盟友怼中国,但是总有一种“保护对手,痛击队友”的既视感……
 
03

 

实话来说,我个人认为这次怼“一带一路”计划,应该是拜登经历了俄乌冲突、美国峰会、G7扯皮来回抽脸之后,真让逼得没招了,急于表现美国控制力而弄出来的动静。

目的不是为了搞建设,而是为了搞破坏。
讲真,美国政府是不可能强逼私人资本去第三世界献温暖的,最终的动员,也只能落实在利润上。
但是,和平繁荣时期,西方资本国家可以依靠自身资本冗余,用低利率甚至0利率政策制造与发展中国家之间的利差,从而引导私人投资涌入第三世界国家榨取剩余资本。
但是此时,世界通胀已经到了憋都憋不住的地步了,美联储金融工具几乎火力全开,依然收效甚微。
大规模缩表和提升利率,已经是目前西方央行的最后一根救命稻草,而发展中国家刚刚或者依然处在疫情、产业链脱钩和通胀萧条的三重冲击之中。
他们此时是否能提供足够的资本血食都是个问题,毕竟现在又不是高增长阶段。
一边是西方利率必须抬升,一边是发展中国家投资回报率下滑,利差基本已经被磨平,又恰逢全球资本回流美国的“收割季”。
你不仅想动员国内私人资本放弃这场血食狂欢,还想让他们出去修路送温暖?

实话讲,我认为除了见不得光的政治交易以外,基本没有任何可能性。
04

而且,即便他们愿意出来当这个炮灰,也得有打得过中国基建大军的能力吧?
毫不夸张的说,目前全世界谁想在基建方面跟中国掰腕子,难度丝毫不亚于在乒乓球桌上单挑整个中国队。
我不是针对谁啊!我是说有在这方面,有一个算一个都是战五渣~

美国又想画大饼砸中国?
在世界范围的基建招标中,中国从来都是处于压倒性的主导地位。
中国公司每年在海外基建招标中,都是数十亿美元的订单起步,而美国在2020年时期订单总量才2700万出头。
全世界TPO20的基建承包集团,中国自己独霸14家,剩下6六家欧洲分,美国有啥?
他有个锤子……

英国支援非洲一个大桥,修了七年不说,修成以后没用两个月就塌了,工人度假的时间比施工的时间还长。
美国的基建效率,别说对外支援了,能搞定自己家里就不容易,加州公路修了3年才推进了不到100公里,气的美国网友满世界贴中国基建视频。

美国又想画大饼砸中国?
中国不论是工程质量、施工速度还是工程体量上,都不是G7追得上的。
何况这一次,G7玩命弄出来6000亿号称要搞掉“一带一路”,却不知中国“一带一路”已经遍布全世界100多个国家,涉及项目超过2600个,总价值已经超过3.7万亿美元,占全世界GDP总量4.3%。
到2030年,每年将预期为全球产生1.6万亿美元收益,占全球GDP1.3%,其中90%的利润都会由伙伴国一起分享。
我们2015年至2030年,能够帮助760万人脱离极端贫困,3200万人摆脱中度贫困。
实实在在的数据和成果就摆在那里,莫说这6000亿大概率又是一次“空口白牙”,即便能够全部付诸实施,也算不得一个大数字。
真想刚正面,没有5万亿美元想都不用想。

最开始他们的计划是扔40万亿,后来数了数,是真的玩不起才变成了6000亿,就这还得找私人资本“借”……
但是!
但是,就像美国网友说的那样:“为什么只是现在(才提供帮助)?中国这样做了至少6年,将其‘发展’的努力集中在亚洲和非洲,扩大了自身的影响力。这一切都不是秘密。而G7只是看着,什么也没有做。”

美国又想画大饼砸中国?

虽然这位网友说的不准确,我们13年就开始支援全世界发展中国家了。
但是事情没有错,整整9年过去了,他们就是那么看着无动于衷,而此时却突然跳出来要“创造美好世界”了。
其动机几乎昭然若揭!
6000亿美元成事肯定不足,但用于败事必然有余。
截至2020年底,撒哈拉以南非洲国家整体外债存量超过7000亿美元。其中,西方私营债权人占据非洲长期债务高达47%。
我在以前的文章中就讲过世界银行的那些手段,以“支援投资”为名,疯狂抬高第三世界债务,进行意识形态输出和政治捆绑,这几乎是一个标准模板。
所以,利用这6000亿的空头支票为诱饵,在对发展中国家进行投资的过程中捆绑政治条件,离间中国与友好国家的关系,几乎是一定会发生的事情!

警惕!还是得警惕啊!

转自:https://mp.weixin.qq.com/s/UokHMMWmW_GFEJcpsCuiSg

比居民和企业没钱更加严重的是,政府也没钱了,甚至可能财政重整

1

疫情冲击下,企业破产倒闭,居民降薪裁员生活困难, 早已经不是什么新闻

毕竟封城之下,企业停工停产,破产裁员,居民失业降薪,企业和居民陷入困境,很容易理解

但现在连政府也没钱了

有些地方,甚至连债都还不起了——只能启动财政重整

其实也不难理解,企业没有收入,居民没有收入,政府的税收自然就会减少。为应对疫情冲击,还要给企业和居民减免税费,政府的收入下降得更快。毕竟政府本身不直接创造财富,政府所有的收入都是从企业和居民那收来的各种税费。

 6月16日,财政部公布了2022年5月财政收支情况。财政部数据显示,1-5月累计,全国一般公共预算收入86739亿元,扣除留抵退税因素后增长2.9%,按自然口径计算下降10.1%。全国税收收入72459亿元,扣除留抵退税因素后增长1.4%,按自然口径计算下降13.6%

财政部数据显示,从财政收入看,扣除留抵退税因素后,5月份全国一般公共预算收入下降5.7%,降幅与4月份基本相当,按自然口径下降32.5%

不可否认的是,政府的财政收入的确在下降,财政压力已经非常严重

地方政府最大的一个收入来源,土地拍卖收入,也下降得非常厉害

1-5月,国有土地使用权出让收入18613亿元,比上年同期下降28.7%

土地收入大幅下降,那与土地相关的税费收入也大幅下降,财政部的数据可以看到,土地和房地产相关税收中,契税2341亿元,比上年同期下降28.1%;土地增值税3053亿元,比上年同期下降9.4%

大家来看看今年各地政府卖地收入,一片惨绿,全面下滑

比居民和企业没钱更加严重的是,政府也没钱了,甚至可能财政重整

除了深圳之外,各地政府卖地收入全部下滑,其中天津下降达91.29%,武汉下降88.52%,帝都北京都下滑了56.75%

比居民和企业没钱更加严重的是,政府也没钱了,甚至可能财政重整

这两年,税收下滑,加上卖地收入下滑,各地政府,也没钱了

政府财政,关系到政府运行、政策实施、民生保障,其重要性不言而喻

2

没钱了,怎么办

不管是企业,个人,还是政府,没钱了,只有两个办法:开源和节流

开源,就是增加税收,但在目前这种情况下,增加税收就别想了,企业和居民都等着救济呢

那剩下的办法只能是节流了

各地方政府要过紧日子了

有些地方事业编,公务员的年终奖已经降了,有些还没降

在财政收入下降的大背景下,削减公务员福利已经是“势在必行”,哪怕现在没降的,将来也肯定会降。因为没有别的办法,困难情况下只能同舟共济,一起渡过难关

比居民和企业没钱更加严重的是,政府也没钱了,甚至可能财政重整

刚刚,随手百度了一下公务员降薪,有1760万条信息

如果削减福利,还不能解决问题,那么下一步,可能就要精兵简政了

不知道那些疯狂考编,疯狂考公的人,等上岸后,发现自己每月所得,还不够考试的费用时,该做如何感想

还有那些体制内的,真精简到自己头上时,可有什么后手

在时代的冲击下,在疫情冲击下,没有什么是一定保险的,哪怕是体制内

所以才有千万人考公,也有人主动逃出体制

财政没钱,不仅仅影响体制内人员工资奖金,还影响大家的医保

本来医保就缺钱,疫情下有一部分还被拿来做核酸,医保就更缺钱了。医保缺钱,下一轮集采将更加猛烈,对医保资金的核查必将更加严格。接下来,肯定会严查医保套保,肯定会抓一批人。

据国家医保局官网消息,5月31日,国家医保局、财政部、国家卫生健康委、国家中医药局四部委发布《关于开展2022年度医疗保障基金飞行检查工作的通知医保函〔2022〕24号》(下称《通知》),开启2022年度医保基金飞行检查。

财政缺钱,还影响到基建投资,谁都知道基建投资可以拉动经济,但现在财政缺钱,必将影响到基建投资,也就影响到经济发展

财政缺钱,必将找各种办法回补,那些以前偷税漏税的,要小心了,平时政府睁一只眼闭一只眼,现在估计也要找回来了,这两年各地严查偷税漏税的新闻,不少吧。

财政缺钱,肯定想办法多卖点地,所以大家看到,这段时间,关于楼市的政策层出不穷,从地方到中央,从中央到央行,都在想尽一切办法刺激楼市,刺激房地产,想着拉动经济,想着多卖点地。所以刺激楼市的政策不会停止。

可以说,财政缺钱的一系列连锁反应刚刚开始,不管是对体制内人员,还是对普通老百姓,不管是对中国经济,还是对居民的收入,都会带来深刻的影响

 

3

短期内,财政紧张的局面不会得到根本的改变

1、经济下行压力很大,短期内仍未看到经济好转的迹象。经济没有变好,税收就上不来,税收上不来,财政紧张的日子难以结束

2、中小企业仍然需要救助,税费减免措施还得实行,经济落后地区的转移支付压力仍在

3、收入在下降,但很多刚性支出无法避免。比如核酸检测费用,抗疫物资费用,教师公务员基本工资等等

4、当前楼市持续低迷,居民收入下降,对房地产的预期仍保持悲观,房地产企业没有拿地的意愿,各地方政府的卖地收入仍然保持负增长态势

疫情当下,经济困难重重,不只是企业在负重前行,不仅是居民收入下降,现在政府的财政收入也在下降。企业、居民、政府都在过紧日子,而且在短期内仍然看不到改善的希望

 

有些地方政府,已经无力清偿到期债务了,甚至到了“准破产”状态,类似于企业的暴雷

 

去年12月28日,中国第一个地级市黑龙江鹤岗市宣布实施“财政重整”。
比居民和企业没钱更加严重的是,政府也没钱了,甚至可能财政重整

通告说白了,就是长期入不敷出,可能还不了债了

如果企业还不了债,大不了破产倒闭,但政府总是要运行吧,肯定不能破产倒闭,那就整个好听的名词吧——财政重整

但与企业破产不一样的是,地方政府财政重整后,债务可能由上级政府偿还,子债父偿

 

就如上图通告中所说的:相关本息或由省政府代偿

 

或由的意思是可能,可能还,也可能不还,可能由省政府还,可能用其他方式还

 

说白了,就是政府进入准“破产状态”

 

看到了吧,在疫情冲击下,不仅仅企业和居民破产裁员,降薪失业,连政府也没钱了

 

甚至有些地方政府也进入财政重整状态,进入“准破产”

 

大家且行且珍惜吧,现在唯一希望是疫情早点过去,经济可以早点重启。

疫情什么时候过去咱们不知道,经济什么时候能好转也不太清楚

那咱就做自己能做的吧

 

疫情什么时候结束、经济危机什么时候过去,这些咱都管不了。咱们做自己能做的吧:锻炼身体,学习知识,关心家人

好好锻炼身体,健健康康的,不但对自己好,对自己家人好,也为国家医保做了贡献,为国家财政做了贡献

祝大家健康

转自:https://mp.weixin.qq.com/s/0ZC9bN_4kUYw8ef70-hU2Q

抓取速度提升 3 倍!Python 的这个内置库你用上了吗?

从网站中抓取数据是开发者的一个典型“用例”。无论它是属于副业项目,还是你正在成立一个初创公司,抓取数据似乎都很有必要。

举个例子,倘若您想要创建一个比价网站,那么您会需要从各种电商网站上抓取价格信息;或者您想要构建一个可以识别商品并在亚马逊上自动查找价格的“人工智能”。类似的场景还有很多。

但是您有没有注意到,获取所有页面信息的速度有多慢呢?您会选择一个接一个地去抓取商品吗?应该会有更好的解决方案吧?答案是肯定的。

抓取网页可能非常耗时,因为您必须花时间等待服务器响应,抑或是速率受限。这就是为什么我们要向您展示如何通过在 Python 中使用并发来加速您的网页数据抓取项目

前提

为了使代码正常运行,您需要安装 python 3[1]。部分系统可能已经预装了它。然后您还需要使用 pip install 安装所有必要的库。

pip install requests beautifulsoup4 aiohttp numpy

如果您了解并发背后的基础知识,可以跳过理论部分直接进入实际操作环节。

并发

并发是一个术语,用于描述同时运行多个计算任务的能力。

当您按顺序向网站发出请求时,您可以选择一次发出一个请求并等待结果返回,然后再发出下一个请求。

不过,您也可以同时发送多个请求,并在它们返回时处理对应的结果,这种方式的速度提升效果是非常显著的。与顺序请求相比,并发请求无论是否并行运行(多个 CPU),都会比前者快得多 — 稍后会详细介绍。

要理解并发的优势。我们需要了解顺序处理和并发处理任务之间的区别。假设我们有五个任务,每个任务需要 10 秒才能完成。当按顺序处理它们时,完成五个任务所需的时间为 50 秒;而并发处理时,仅需要 10 秒即可完成。

抓取速度提升 3 倍!Python 的这个内置库你用上了吗?

除了提高处理速度之外,并发还允许我们通过将网页抓取任务负载分布于多个进程中,来实现在更短的时间内完成更多的工作。

这里有几种实现并行化请求的方式:例如 multiprocessingasyncio。从网页抓取的角度来看,我们可以使用这些库来并行处理对不同网站或同一网站不同页面的请求。在本文中,我们将重点关注 asyncio,这是一个 Python 内置的模块,它提供了使用协程编写单线程并发代码的基础设施。

由于并发意味着更复杂的系统和代码,因此在使用前请考虑在您的使用场景中是否利大于弊。

并发的优势

  • 在更短的时间内完成更多的工作
  • 可以将空闲的网络时间投入到其他请求中

并发的危险之处

  • 更不易于开发和调试
  • 可能存在竞争条件
  • 需要检查并使用线程安全的函数
  • 一不小心就会增加程序阻塞的概率
  • 并发自带系统开销,因此需要设置合理的并发级别
  • 针对小型站点请求过多的话,可能会变成 DDoS 攻击

抓取速度提升 3 倍!Python 的这个内置库你用上了吗?

 

*同时释放所有请求时要小心*

 

为何选择 asyncio

在做出选择之前,我们有必要了解一下 asynciomultiprocessing 之间的区别,以及 IO 密集型与 CPU 密集型之间的区别。

asyncio[2] “是一个使用 async/await 语法编写并发代码的库”,它在单个处理器上运行。

multiprocessing[3] “是一个支持使用 API 生产进程的包 […] 允许程序员充分利用给定机器上的多个处理器”。每个进程将在不同的 CPU 中启动自己的 Python 解释器。

IO 密集型意味着程序将受 I/O 影响而变得运行缓慢。在我们的案例中,主要指的是网络请求。

CPU 密集型意味着程序会由于 CPU 计算压力导致运行缓慢 — 例如数学计算。

为什么这会影响我们选择用于并发的库?因为并发成本的很大一部分是创建和维护线程/进程。对于 CPU 密集型问题,在不同的 CPU 中拥有多个进程将会提升效率。但对于 I/O 密集型的场景,情况可能并非如此。

由于网页数据抓取主要受 I/O 限制,因此我们选择了 asyncio。但如果有疑问(或只是为了好玩),您可以使用 multiprocessing 尝试这个场景并比较一下结果。

抓取速度提升 3 倍!Python 的这个内置库你用上了吗?

顺序实现的版本

我们将从抓取 scrapeme.live 作为示例开始,这是一个专门用于测试的电子商务网站。

首先,我们将从顺序抓取的版本开始。以下几个片段是所有案例的一部分,因此它们将保持不变。

通过访问目标主页,我们发现它有 48 个子页面。由于是测试环境,这些子页面不会很快发生变化,我们会使用到以下两个常量:

base_url = "https://scrapeme.live/shop/page" 
pages = range(149# max page (48) + 1

现在,从目标产品中提取基础数据。为此,我们使用 requests.get 获取 HTML 内容,然后使用 BeautifulSoup 解析它。我们将遍历每个产品并从中获取一些基本信息。所有选择器都来自对内容的手动审查(使用 DevTools),但为简洁起见,我们不会在这里详细介绍。

import requests 
from bs4 import BeautifulSoup 
 
def extract_details(page): 
 # concatenate page number to base URL 
 response = requests.get(f"{base_url}/{page}/"
 soup = BeautifulSoup(response.text, "html.parser"
 
 pokemon_list = [] 
 for pokemon in soup.select(".product"): # loop each product 
  pokemon_list.append({ 
   "id": pokemon.find(class_="add_to_cart_button").get("data-product_id"), 
   "name": pokemon.find("h2").text.strip(), 
   "price": pokemon.find(class_="price").text.strip(), 
   "url": pokemon.find(class_="woocommerce-loop-product__link").get("href"), 
  }) 
 return pokemon_list

extract_details 函数将获取一个页码并将其连接起来,用于创建子页面的 URL。获取内容并创建产品数组后返回。这意味着返回的值将是一个字典列表,这是一个后续使用的必要细节。

我们需要为每个页面运行上面的函数,获取所有结果,并存储它们。

import csv 
 
# modified to avoid running all the pages unintentionally 
pages = range(13
 
def store_results(list_of_lists): 
 pokemon_list = sum(list_of_lists, []) # flatten lists 
 
 with open("pokemon.csv""w"as pokemon_file: 
  # get dictionary keys for the CSV header 
  fieldnames = pokemon_list[0].keys() 
  file_writer = csv.DictWriter(pokemon_file, fieldnames=fieldnames) 
  file_writer.writeheader() 
  file_writer.writerows(pokemon_list) 
 
list_of_lists = [ 
 extract_details(page) 
 for page in pages 

store_results(list_of_lists)

运行上面的代码将获得两个产品页面,提取产品(总共 32 个),并将它们存储在一个名为 pokemon.csv 的 CSV 文件中。 store_results 函数不影响顺序或并行模式下的抓取。你可以跳过它。

由于结果是列表,我们必须将它们展平以允许 writerows 完成其工作。这就是为什么我们将变量命名为list_of_lists(即使它有点奇怪),只是为了提醒大家它不是扁平的。

输出 CSV 文件的示例:

id name price url
759 Bulbasaur £63.00 https://scrapeme.live/shop/Bulbasaur/
729 Ivysaur £87.00 https://scrapeme.live/shop/Ivysaur/
730 Venusaur £105.00 https://scrapeme.live/shop/Venusaur/
731 Charmander £48.00 https://scrapeme.live/shop/Charmander/
732 Charmeleon £165.00 https://scrapeme.live/shop/Charmeleon/

如果您要为每个页面 (48) 运行脚本,它将生成一个包含 755 个产品的 CSV 文件,并花费大约 30 秒。

time python script.py 
 
real 0m31,806s 
user 0m1,936s 
sys 0m0,073s

asyncio 介绍

我们知道我们可以做得更好。如果我们同时执行所有请求,它应该花费更少时间,对吧?也许会和执行最慢的请求所花费的时间相等。

并发确实应该运行得更快,但它也涉及一些开销。所以这不是线性的数学改进。

为此,我们将使用上面提到的 asyncio。它允许我们在事件循环中的同一个线程上运行多个任务(就像 Javascript 一样)。它将运行一个函数,并在运行时允许时将上下文切换到不同的上下文。在我们的例子中,HTTP 请求允许这种切换。

我们将开始看到一个 sleep 一秒钟的示例。并且脚本应该需要一秒钟才能运行。请注意,我们不能直接调用 main。我们需要让 asyncio 知道它是一个需要执行的异步函数。

import asyncio 
 
async def main(): 
 print("Hello ..."
 await asyncio.sleep(1
 print("... World!"
 
asyncio.run(main())
time python script.py 
Hello ... 
... World! 
 
real 0m1,054s 
user 0m0,045s 
sys 0m0,008s

简单的并行代码

接下来,我们将扩展一个示例案例来运行一百个函数。它们每个都会 sleep 一秒钟并打印一个文本。如果我们按顺序运行它们大约需要一百秒。使用 asyncio,只需要一秒!

这就是并发背后的力量。如前所述,对于纯 I/O 密集型任务,它将执行得更快 – sleep 不是,但它对示例很重要。

我们需要创建一个辅助函数,它会 sleep 一秒钟并打印一条消息。然后,我们编辑 main 以调用该函数一百次,并将每个调用存储在一个任务列表中。最后也是关键的部分是执行并等待所有任务完成。这就是 asyncio.gather[4] 所做的事情。

import asyncio 
 
async def demo_function(i): 
 await asyncio.sleep(1
 print(f"Hello {i}"
 
async def main(): 
 tasks = [ 
  demo_function(i) 
  for i in range(0100
 ] 
 await asyncio.gather(*tasks) 
 
asyncio.run(main())

正如预期的那样,一百条消息和一秒钟的执行时间。完美!

使用 asyncio 进行抓取

我们需要将这些知识应用于数据抓取。遵循的方法是同时请求并返回产品列表,并在所有请求完成后存储它们。每次请求后或者分批保存数据可能会更好,以避免实际情况下的数据丢失。

我们的第一次尝试不会有并发限制,所以使用时要小心。在使用数千个 URL 运行它的情况下……好吧,它几乎会同时执行所有这些请求。这可能会给服务器带来巨大的负载,并可能会损害您的计算机。

requests 不支持开箱即用的异步,因此我们将使用 aiohttp [5] 来避免复杂化。 requests 可以完成这项工作,并且没有实质性的性能差异。但是使用 aiohttp 代码更具可读性。

import asyncio 
import aiohttp 
from bs4 import BeautifulSoup 
 
async def extract_details(page, session): 
 # similar to requests.get but with a different syntax 
 async with session.get(f"{base_url}/{page}/"as response: 
 
  # notice that we must await the .text() function 
  soup = BeautifulSoup(await response.text(), "html.parser"
 
  # [...] same as before 
  return pokemon_list 
 
async def main(): 
 # create an aiohttp session and pass it to each function execution 
 async with aiohttp.ClientSession() as session: 
  tasks = [ 
   extract_details(page, session) 
   for page in pages 
  ] 
  list_of_lists = await asyncio.gather(*tasks) 
  store_results(list_of_lists) 
 
asyncio.run(main())

CSV 文件应该像以前一样包含每个产品的信息 (共 755 个)。由于我们同时执行所有页面调用,结果不会按顺序到达。如果我们将结果添加到 extract_details 内的文件中,它们可能是无序的。但我们会等待所有任务完成然后处理它们,因此顺序性不会有太大影响。

time python script.py 
 
real 0m11,442s 
user 0m1,332s 
sys 0m0,060s

我们做到了!速度提升了 3 倍,但是……不应该是 40 倍吗?没那么简单。许多因素都会影响性能(网络、CPU、RAM 等)。

在这个演示页面中,我们注意到当执行多个调用时,响应时间会变慢,这可能是设计使然。一些服务器/提供商可以限制并发请求的数量,以避免来自同一 IP 的过多流量。它不是一种阻塞,而是一个队列。你会得到服务响应,但需要稍等片刻。

要查看真正的加速,您可以针对延迟[6]页面进行测试。这是另一个测试页面,它将等待 2 秒然后返回响应。

base_url = "https://httpbin.org/delay/2" 
#... 
 
async def extract_details(page, session): 
 async with session.get(base_url) as response: 
  #...

这里去掉了所有的提取和存储逻辑,只调用了延迟 URL 48 次,并在 3 秒内运行完毕。

time python script.py 
 
real 0m2,865s 
user 0m0,245s 
sys 0m0,031s

使用信号量限制并发

如上所述,我们应该限制并发请求的数量,尤其是针对单个域名。

asyncio 带有 Semaphore[7],一个将获取和释放锁的对象。它的内部功能将阻塞一些调用,直到获得锁,从而创建最大的并发性。

我们需要创建尽可能最大值的信号量。然后等待提取函数运行,直到 async with sem 可用。

max_concurrency = 3 
sem = asyncio.Semaphore(max_concurrency) 
 
async def extract_details(page, session): 
 async with sem: # semaphore limits num of simultaneous downloads 
  async with session.get(f"{base_url}/{page}/"as response: 
   # ... 
 
async def main(): 
  # ... 
 
loop = asyncio.get_event_loop() 
loop.run_until_complete(main())

它完成了工作,并且相对容易实现!这是最大并发设置为 3 的输出。

time python script.py 
 
real 0m13,062s 
user 0m1,455s 
sys 0m0,047s

这表明无限并发的版本并没有全速运行。如果我们将限制增加到 10,总时间与未限制的脚本运行时间相近。

使用 TCPConnector 限制并发

aiohttp 提供了一种替代解决方案,可提供进一步的配置。我们可以创建传入自定义 TCPConnector[8] 的客户端会话。

我们可以使用两个适合我们需求的参数来构建它:

  • limit – “同时连接的总数”。
  • limit_per_host – “限制同时连接到同一端点的连接数”(同一主机、端口和 is_ssl)。
max_concurrency = 10 
max_concurrency_per_host = 3 
 
async def main(): 
 connector = aiohttp.TCPConnector(limit=max_concurrency, limit_per_host=max_concurrency_per_host) 
 async with aiohttp.ClientSession(connector=connector) as session: 
  # ... 
 
asyncio.run(main())

这种写法也易于实施和维护!这是每个主机最大并发设置为 3 的输出。

time python script.py 
 
real 0m16,188s 
user 0m1,311s 
sys 0m0,065s

Semaphore 相比的优势是可以选择限制每个域的并发调用和请求的总量。我们可以使用同一个会话来抓取不同的站点,每个站点都有自己的限制。

缺点是它看起来有点慢。需要针对真实案例,使用更多页面和实际数据运行一些测试。

multiprocessing

就像我们之前看到的那样,数据抓取是 I/O 密集型的。但是,如果我们需要将它与一些 CPU 密集型计算混合怎么办?为了测试这种情况,我们将使用一个函数,该函数将在每个抓取的页面之后 count_a_lot。这是强制 CPU 忙碌一段时间的简单(且有些愚蠢)的方法。

def count_a_lot(): 
 count_to = 100_000_000 
 counter = 0 
 while counter < count_to: 
  counter = counter + 1 
 
async def extract_details(page, session): 
 async with session.get(f"{base_url}/{page}/"as response: 
  # ... 
  count_a_lot() 
  return pokemon_list

对于 asyncio 版本,只需像以前一样运行它。可能需要很长时间⏳。

time python script.py 
 
real 2m37,827s 
user 2m35,586s 
sys 0m0,244s

现在,比较难理解的部分来了:

直接引入 multiprocessing 看起来有点困难。实际上,我们需要创建一个 ProcessPoolExecutor,它能够“使用一个进程池来异步执行调用”。它将处理不同 CPU 中每个进程的创建和控制

但它不会分配负载。为此,我们将使用 NumPyarray_split,它会根据 CPU 的数量将页面范围分割成相等的块。

main 函数的其余部分类似于 asyncio 版本,但更改了一些语法以匹配 multiprocessing 的语法风格。

此处的本质区别是我们不会直接调用extract_details。实际上是可以的,但我们将尝试通过将 multiprocessingasyncio 混合使用来获得最好的执行效率。

from concurrent.futures import ProcessPoolExecutor 
from multiprocessing import cpu_count 
import numpy as np 
 
num_cores = cpu_count() # number of CPU cores 
 
def main(): 
 executor = ProcessPoolExecutor(max_workers=num_cores) 
 tasks = [ 
  executor.submit(asyncio_wrapper, pages_for_task) 
  for pages_for_task in np.array_split(pages, num_cores) 
 ] 
 doneTasks, _ = concurrent.futures.wait(tasks) 
 
 results = [ 
  item.result() 
  for item in doneTasks 
 ] 
 store_results(results) 
 
main()

长话短说,每个 CPU 进程都会有几页需要抓取。一共有 48 个页面,假设你的机器有 8 个 CPU,每个进程将请求 6 个页面(6 * 8 = 48)。

这六个页面将同时运行!之后,计算将不得不等待,因为它们是 CPU 密集型的。但是我们有很多 CPU,所以它们应该比纯 asyncio 版本运行得更快。

async def extract_details_task(pages_for_task): 
 async with aiohttp.ClientSession() as session: 
  tasks = [ 
   extract_details(page, session) 
   for page in pages_for_task 
  ] 
  list_of_lists = await asyncio.gather(*tasks) 
  return sum(list_of_lists, []) 
 
 
def asyncio_wrapper(pages_for_task): 
 return asyncio.run(extract_details_task(pages_for_task))

这就是神奇的地方。每个 CPU 进程将使用页面的子集启动一个 asyncio(例如,第一个页面从 1 到 6)。

然后,每一个都将调用几个 URL,使用已知的 extract_details 函数。

上述内容需要花点时间来吸收它。整个过程是这样的:

  1. 创建执行器
  2. 拆分页面
  3. 每个进程启动 asyncio
  4. 创建一个 aiohttp 会话并创建页面子集的任务
  5. 提取每一页的数据
  6. 合并并存储结果

下面是本次的执行时间。虽然之前我们没有提到它,但这里的 user 时间却很显眼。对于仅运行 asyncio 的脚本:

time python script.py 
 
real 2m37,827s 
user 2m35,586s 
sys 0m0,244s

具有 asyncio 和多个进程的版本:

time python script.py 
 
real 0m38,048s 
user 3m3,147s 
sys 0m0,532s

发现区别了吗?实际运行时间方面第一个用了两分钟多,第二个用了 40 秒。但是在总 CPU 时间(user 时间)中,第二个超过了三分钟!看起来系统开销的耗时确实有点多。

这表明并行处理“浪费”了更多时间,但程序是提前完成的。显然,您在决定选择哪种方法时,需要考虑到开发和调试的复杂度。

结论

我们已经看到 asyncio 足以用于抓取,因为大部分运行时间都用于网络请求,这种场景属于 I/O 密集型并且适用于单核中的并发处理。

如果收集的数据需要一些 CPU 密集型工作,这种情况就会改变。虽然有关计数的例子有一点愚蠢,但至少你理解了这种场景。

在大多数情况下,带有 aiohttpasyncio 比异步的 requests 更适合完成目标工作。同时我们可以添加自定义连接器以限制每个域名的请求数、并发请求总数。有了这三个部分,您就可以开始构建一个可以扩展的数据抓取程序了。

另一个重要的部分是允许新的 URL/任务加入程序运行(类似于队列),但这是另一篇文章的内容。敬请关注!

参考资料

[1]

 

python 3: https://www.python.org/downloads/

[2]

asyncio: https://docs.python.org/3/library/asyncio.html

[3]

multiprocessing: https://docs.python.org/3/library/multiprocessing.html

[4]

asyncio.gather: https://docs.python.org/3/library/asyncio-task.html#asyncio.gather

[5]

aiohttp: https://docs.aiohttp.org/

[6]

延迟: https://httpbin.org/delay/2

[7]

Semaphore: https://docs.python.org/3/library/asyncio-sync.html#asyncio.Semaphore

[8]

TCPConnector: https://docs.aiohttp.org/en/stable/client_reference.html#tcpconnector

[9]

参考原文: https://www.zenrows.com/blog/speed-up-web-scraping-with-concurrency-in-python

 

 

– EOF –

 

转自:https://mp.weixin.qq.com/s/pPpc7CH4Rr9WTa4p8ue2Iw