2021-05-18

一、昨天报错的原因和处理方法
昨天在数据爬取的过程中遇到了列表数组越界报错
在这里插入图片描述
在询问了大佬之后,得知是

script = soup.find(id='getListByCountryTypeService2true')
text = script.text

应该为

script = soup.find(id='getListByCountryTypeService2true')
text = script.string

原因是text已经指定了str类型,而我查找的内容超出了text的范围的“bs4.element.Script
将获取的数据装进一个列表里,这个列表长度是1,即只包含一根元素,就不会再出现越界的报错
在这里插入图片描述
执行后会得到这样的字典和字符串

小结:
在这里插入图片描述
json和python间的相互转换

二、疫情爬虫项目
1.实现采集最近一日世界各国疫情数据

from encodings import gbk
coding = gbk
import requests
from bs4 import BeautifulSoup
import re
import json

# 1. 发送请求, 获取疫情首页
response = requests.get('https://ncov.dxy.cn/ncovh5/view/pneumonia')
home_page = response.content.decode()

# 2. 从疫情首页, 提取最近一日各国疫情数据
soup = BeautifulSoup(home_page, 'lxml')
script = soup.find(id="getListByCountryTypeService2true")
text = script.string
# print(text)
# 3. 从疫情数据中, 获取json格式的字符串
json_str = re.findall(r'\[.+]', text)[0]
print(json_str)
# 4. 把json格式的字符串转换为Python类型
last_day_corona_virus = json.loads(json_str)
# print(last_day_corona_virus)
# 5. 以json格式保存, 最近一日各国疫情数据
with open('data/last_day_corona_virus.json', 'w', encoding=utf-8) as fp:
    json.dump(last_day_corona_virus, fp, ensure_ascii=False)

得到数据
在这里插入图片描述
2.采集1月1日以来各国疫情数据
在之前爬取到的数据中,有一个叫做statisticsData的标签,这是各国疫情数据的统计内容
验证方法:
找到标签下的任意一个json地址
在这里插入图片描述
下载到json文件
在这里插入图片描述
其中有当前人数curedCount和日期dateId,能看到日期所记录的时间
由于我们的数据中有200多个国家,如果想要爬取各国数据,就要发送200多次请求,那么之前的方法就会显得有些臃肿,所以需要重构代码,使其具有更好的扩展性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值