查看原文
其他

爬虫俱乐部祝您新年快乐子夜钟声响,鼠年爆竹喧。律回春晖渐,万象始更新。过去的一年里,感谢大家一路的支持与信任。辞旧迎新之际,爬虫俱乐部全体成员祝大家新春快乐,身体健康,锦鲤附身,日富一日!祝辛勤工作的老师们桃李芬芳满天下,万事如意步步高;祝科研路上的小伙伴们脱贫脱单不脱发,有颜有才有paper~近段时间以来,新型冠状病毒的疫情牵动着每一个人的心,我们衷心地希望每一个国民都能平安渡过这个特殊时期。此时,上海、四川等地的第一批重症和呼吸科医生已经出征武汉,还有千千万万名医护人员主动递交“请战书”,放弃与家人的团圆,义无反顾赶赴疫情的中心,为人民的健康牢筑安全防线。他们是最美的逆行者,是真正的英雄!我们不是医生,但我们也在用自己的方式参与此次抗击新型肺炎的战役。同往常一样,爬虫俱乐部坚持用数据发声,使用python抓取了各省份关于冠状病毒肺炎的相关网页标题数量,制作了各省疫情关注度地图,希望可以唤起大家的防护意识。 结果如图所示,排名前四的新闻检索量分别在北京市、上海市、广东省、湖北省。截至1月24日,湖北、北京、广东、上海的确诊病例分别为444例,26例,53例,29例。湖北省是疫情爆发的中心,也是冠状病毒最先被发现的地方。但相对而言,并没有表现出更为明显的关注度。疫情的集中爆发是否与政府的重视程度和曝光度有关?与2003年的非典相比,是不是重倒了“后人哀之而不鉴之,亦使后人而复哀后人也”的覆辙?相较之下,河南省作为湖北的毗邻省份,在12月底就停运了开往武汉的班车,实行了一系列全面防控疫情的举措,如全面禁止贩卖活禽、全面排查武汉出行人口。我们也注意到,对疫情关注度较高的省份多集中在湖北省的相邻省份和病例被较早发现的地区。北方的一些省份,如青海、甘肃、内蒙古以及东北三省对此次疫情的关注度相对较低。在此也提醒大家,春运期间人口流动密集,而病毒的传染具有不确定性,无论身处何处,都不应掉以轻心。抗击病毒,是每个人的职责。团圆是福,平安更是福。希望大家在欢度佳节的同时,不要忘记关注疫情,减少拜年、出行和聚餐,平安度过佳节。在这里,小编再为大家提供几点贴心提示:戴好口罩,不要吸烟;勤用肥皂和清水洗手,准备方便携带的酒精消毒产品;如与有流感症状的人距离较近,注意消毒;避免近距离接触野生动物,不捕食野味;咳嗽或打喷嚏时,用手肘捂住口鼻,并马上洗手;不要随地吐痰;减少出门,特别是人群密集处,老人、儿童、孕妇做重点防护;警惕异常症状,及时就诊;板蓝根、熏醋、抗生素并不能起到抗病毒的作用。最后,我们附上完整步骤:首先在百度首页查看设置中的高级搜索,搜索冠状病毒、肺炎以及对应省份,选中“仅网页的标题中”。在开发者工具中点击Network,查看到网页的请求方式属于get。参考往期推文《自科基金项目信息爬取》,我们可以采取如下步骤进行爬取:第一步,加载第三方库并设置初始路径:import reimport urllib.parseimport jsonimport requestsfrom lxml import etreeimport csvimport osos.chdir(r'E:\爬虫俱乐部 ') #加载路径第二步定义函数,输入请求头中的信息,将不同省份名称设置为函数的参数。参考《XPath Helper助XPath爬虫一臂之力》,利用XPath提取网页中“百度为您找到相关结果约3,800个”。我们可以使用正则表达式提取对应数量:def extract_title(city):url=f'https://www.baidu.com/s?q1=冠状病毒%2C肺炎%2C{city}&q2=&q3=&q4=&gpc=stf&ft=&q5=1&q6=&tn=baiduadv' headers={ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh,zh-CN;q=0.9', 'Connection': 'keep-alive', 'Cookie': 'BIDUPSID=6FD89BE1E8F41E30AE2E6E3F2D876932; PSTM=1528768967; BAIDUID=63ADEAABAAACEDF1C4B17C3412F3F275:FG=1; BD_UPN=12314753; H_PS_PSSID=1464_21094_26350_30479; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_645EC=2338pzhWnjn%2BbNPUe%2BDPHt2BJK2dfYLtu5kuQnZGOPqYa7LbHls84dTVhjwNWtA; delPer=0; BD_CK_SAM=1; PSINO=3; BDSVRTM=15', 'Host': 'www.baidu.com', 'Referer': 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baiduadv&wd=title%3A%20(%E5%86%A0%E7%8A%B6%E7%97%85%E6%AF%92%2C%E8%82%BA%E7%82%8E%2C%E5%AE%89%E5%BE%BD)&oq=title%253A%2520(%25E5%2586%25A0%25E7%258A%25B6%25E7%2597%2585%25E6%25AF%2592%252C%25E8%2582%25BA%25E7%2582%258E%252C%25E9%2587%258D%25E5%25BA%2586)&rsv_pq=da35c51600037495&rsv_t=297eWFagqkGJ%2BRZIuMniqG3%2Fc%2FKMX%2Bd1ELDLYdzRJ%2BJi8zoV3DU2fNc5ALqPGaM&rqlang=cn&rsv_enter=1&rsv_dl=tb&inputT=3116&rsv_sug3=93&rsv_sug2=0&rsv_sug4=4527', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-Site': 'same-origin', 'Sec-Fetch-User': '?1', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36' } page=requests.get(url,headers=headers)pagetext=page.texthtmltext=etree.HTML(pagetext)tmptitle=[] content1=htmltext.xpath(f"//span[@class='nums_text']/text()") reg='约(.*?)个'infos =re.findall(reg,content1[0]) infos1 = re.sub(',',"",infos[0])tmptitle.append(infos1) return tmptitle第三步,定义省份列表,并循环提取不同省份、直辖市以及港澳台的新闻数量。province = ["湖北","北京","香港","广东", "云南","海南","吉林","上海", "广西","安徽","重庆","湖南", "福建","辽宁","四川","江西", "浙江","宁夏","山西","天津", "山东","黑龙江","江苏","澳门", "台湾","西藏","新疆","青海", "甘肃","陕西","贵州","内蒙古", "河南","河北"]###抓取不同省份信息filtitle=[]for i in range(0,len(province)): print(province[i]) t=extract_title(province[i])filtitle.extend(t)### 储存在dataframe中count=pd.DataFrame(filtitle,columns=['title'])province=pd.DataFrame(province,columns=['省份']) 第四步,结合往期推文《数据可视化之地理图》绘制中国地图,程序如下:from pyecharts import options as optsfrom pyecharts.charts import MapMap_China = ( Map() .add("",[list(z) for z in zip(tt['省份'],count['title'])],"china") .set_global_opts(title_opts=opts.TitleOpts(title="中国地图",pos_left="center")))Map_China.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=155,pos_left="15%",pos_bottom="10%",is_piecewise=True, # 设置为分段 pieces=[ {"min": 1, "max": 2000, "label": "1~2000", "color": "green"}, {"min": 2001, "max": 4000, "label": "2001~4000", "color": "yellow"}, {"min": 4001, "max": 6000, "label": "4001~6000", "color": "orange"}, {"min": 6001, "max": 10000, "label": "6000以上", "color": "red"}, ]))Map_China.render(r'肺炎.html')对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!往期推文推荐过年观影指南(二)过年观影指南(一) egenmore隐藏功能——进制转换相遇insobs,如暗室逢灯数据可视化之地理坐标系SFI:Stata与Python的数据交互手册(一)Stata模拟构建朋友圈一个粉丝的疑惑—— local和scalar新的一年,效率满满~(下)自科基金项目信息爬取rename group批量修改变量名小命令,大不同——insobs插入新值新的一年,效率满满~(上)圆蛋快乐BvD最后一弹——宏观数据宝典一招搞定并购数据多图“预警”(二)关于我们微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。投稿邮箱:statatraining@163.com投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。2020,我们不约而同,如约而至

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存