Python爬虫学习分享(疫情数据爬取+可视化)
Python爬虫学习分享
“The Website is the API." “未来的所有信息都是通过website(网络)提供的。”
这次重大疫情,每时每刻数据都有可能变化,这篇博文将为大家讲解如何爬取实时疫情数据,并且分析数据,作出数据可视化的效果。
爬取网站数据
先是第一种,以丁香医生为例(https://ncov.dxy.cn/ncovh5/view/pneumonia)
#国内各省疫情情况
import requests
import re
def parse_url(page_url,f):
headers = {
user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36}
try:
r=requests.get(page_url,headers=headers,timeout=30)
r.raise_for_status()
r.encoding=r.apparent_encoding
html = r.text
except:
print(访问失败)
# print(html)
#获取省或城市的信息,为避免遗漏省份,可以先将"provinceShortName"替换"cityName"再分析
html=re.sub(rprovinceShortName,cityName,html)
#再把关于中国的部分取出来
html=re.search({ window.getAreaStat =.+?window.getIndexRecommendList2,html)
html=html.group()
# print(html)
cities=re.findall(r"""
{.*?"cityName":"(.+?)", #城市名称
"currentConfirmedCount":(-?d+), #现存确诊
"confirmedCount":(d+), #累计确诊
.+?"curedCount":(d+), #治愈
"deadCount":(d+) #死亡
""",html,re.VERBOSE|re.DOTALL)
# print(type(cities))
for city in cities:
city=list(city)
# print(city)
f.write({},{},{},{},{}
.format(.join(city[0]), .join(city[1]), .join(city[2]), .join(city[4]), .join(city[3])))
def main():
page_url = https://ncov.dxy.cn/ncovh5/view/pneumonia
with open(epidemic situation.csv, a, encoding=utf-8) as f:
parse_url(page_url,f)
main()
这里用到的是正则表达式的方法。为什么选择正则表达式?我们知道此网站的疫情部分数据可以在源代码中查找到,检查中是渲染后的代码,但我们requests爬取网站访问而得到的都是源代码哦,所以需要右键查看源代码才能看到我们能爬取到的完整数据。因此,xpath和BeautifulSoup都不适合操作源代码中json格式的数据,我们选用正则表达式。
那正则表达式爬虫是怎么样的呢?不着急,我们先学习上面这篇代码,日积月累,实践中一点点吸收知识。 导入python自带的re模块,网上有很多关于re的语法介绍,所以re匹配规则这就不介绍,以后可能单独写一篇博客吧。这里介绍几个函数
re.search(正则表达式,被查找的字符串) #从头查找指定字符串,返回第一个
re.match(正则表达式,被查找字符串) #和上面这个区别是正则的开头必须与被查找字符串的开头相匹配,否则返回none
re.findall(r"""
{.*?"cityName":"(.+?)", #城市名称
"currentConfirmedCount":(-?d+), #现存确诊
"confirmedCount":(d+), #累计确诊
.+?"curedCount":(d+), #治愈
"deadCount":(d+) #死亡
""",html,re.VERBOSE|re.DOTALL) #这后面的re.VERBOSE表示正则中可以使用注释|re.DOTALL表示.在正则中代表所有(原本不包括换行符)
这里涉及到了一个selenium模拟点击器,是爬虫较高级的用法,类似模拟人手动打开浏览器。所以通过这个模拟点击器,就可以看到渲染后的源代码里已经有疫情数据了,此时就放心用xpath和BeautifulSoup去解析文档吧! 我用的是谷歌浏览器的chromedriver.exe,若你需要,我博客里有。
其他有什么想问的或不懂的欢迎问我,我会尽力解答,一起学习!
接下来进入数据可视化阶段喽!
https://www.bilibili.com/video/BV1E7411w7Zq?t=332&p=2 http://pyecharts.org/#/zh-cn/global_options
初来乍到,通过写博客和大家分享所学,更希望能向大家学习一些东西,在交流中认识一些大佬们,加油!
