(该文章同步自个人csdn博客)
最近新型肺炎闹得很厉害,于是我就自己写了一个爬虫,爬取最新疫情的情况。
什么是爬虫?
爬虫也就是网络蜘蛛,是一种按照一定的规则,自动爬取万维网的信息的程序或者脚本。
它是怎么工作的?
其实就是通过脚本,向服务器发起访问请求,然后得到服务器返回的结果后,就会返回内容。如果还不明白的话,可以看一下小品:
用户:爬虫,去给我爬取网站上的内容!
爬虫:好的。
(爬虫找到服务器)
爬虫:我能获取你们网页上的内容吗?
服务器:好的,请稍后。
(爬虫得到了用户需要的内容)
爬虫:用户,我爬取到了内容。
用户:干得好!
当然这是在服务器没有使用反爬措施的情况下。如果服务器使用了反爬措施的话,就会出现以下情况:
爬虫:我能获取你们网页上的内容吗?
服务器:滚!
这时就要使用请求头(也就是使用user-agent),让服务器以为是浏览器要获取内容,而不是爬虫,就放行了。
接下来是操作时间
咱们回到正题上,如果要爬取网页上的内容,我们要用到的包如下:
urllib
re
爬取的地址如下:
http://m.medsci.cn/wh.asp
当然你其他网站可以(最好是实时更新的)
接下来,上代码!
# 上次网易那个爬取数据过旧,这次换了个梅斯的页面
(小电视下面就是代码)
# 上次网易那个爬取数据过旧,这次换了个梅斯的页面
# 导入模块
from urllib import request
import re
# 别忘了请求头(headers),以防万一
user_agent = "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0"
headers = {"User-Agent": user_agent}
# 爬取网站地址
req = request.Request("http://m.medsci.cn/wh.asp",headers=headers)
resp = request.urlopen(req)
# 读取页面
html = resp.read()
headline = re.findall(r'
.*',html.decode('utf-8'))result = re.findall(r'
.*',html.decode('utf-8'))time = re.findall(r'
.*
',html.decode('utf-8'))total = re.findall(r'
.*
',html.decode('utf-8'))# 进行数据清洗
headline = str(headline)
headline = headline.replace('''['
''',"")headline = headline.replace('''
'''," ")headline = headline.replace('''
']''',"")total = str(total)
total = total.replace('''['
''','')
total = total.replace('''
']''','')result = str(result)
result = result.replace('''['
''',"")result = result.replace('''
'''," ")result = result.replace(''''
''',"")result = result.replace("
'","")result = result.replace('
',"0")result = result.replace(', ',"\n")
result = result.replace(']',"")
time = str(time)
time = time.replace('''['
''',"")
time = time.replace('''
']''',"")# 输出结果
print("=================================================================")
print(total)
print(headline)
print(result)
print(time)
(代码结束)
终端输出结果如下:
=================================================================
全部:确诊 11904 例 密切接触 131881 例 疑似 16192 例 治愈 206 例 死亡 257 例
地区 确诊 密切接触 疑似 治愈 死亡
湖北 7153 36838 119 249
浙江 599 10023 15
广东 520 1965 11
河南 422 6238 751 3 2
湖南 389 6960 3
安徽 297 4997 3
江西 286 7548 9
重庆 238 4789 13 2
四川 207 4425 3 1
山东 202 5614 72 2
江苏 202 3084 5
上海 153 9804 167 9 1
福建 144 2501 116
北京 139 115 5 1
广西 100 2700 11 2
河北 96 2045 88 1
云南 91 2642 228 1
陕西 87 1979 116
黑龙江 80 1106 181 1
辽宁 60 671 1
海南 57 827 1 1
山西 47 1101 75 1
天津 37 201 154
甘肃 35 556
贵州 29 416 3 2
宁夏 26 792 1
内蒙古 20 396 2
新疆 18 902
吉林 17 831 10 1
香港 12 300
台湾 10
青海 9 135
澳门 7
西藏 1
印度 1
墨西哥 0 7
菲律宾 0 4
巴西 0 1
沙特 0
泰国 19 5
日本 15 1
新加坡 13
韩国 12
澳大利亚 9 2
马来西亚 8
美国 6
德国 5
法国 5
阿联酋 4
加拿大 3
越南 2
英国 2
俄罗斯 2
意大利 2
尼泊尔 1
柬埔寨 1
斯里兰卡 1
芬兰 1
西班牙 1
瑞典 1
厄瓜多尔 0 1
哥伦比亚 0 1
截至 2020-2-1 14:33:04 数据统计
请程序员朋友们尽量避免前往人多的地方,出门戴好口罩。
最后希望各位程序员朋友们能够注意安全!
武汉加油!
中国加油!
欢迎关注:
B站:Chrithon
CSDN:玩Python的FUZE
本文采用 CC-BY-SA 4.0国际协议