python爬虫实例-获取国外疫情信息

一、网站分析

  1. 首先打开这个网站https://news.qq.com/zt2020/page/feiyan.htm#/global?nojump=1。在此选择一个国家,例如美国
    在这里插入图片描述

  2. F12打开浏览器的开发者工具,刷新一下,找到network ,并选中XHR。之后选中list?country那一行
    在这里插入图片描述

  3. 选择header中查看数据项具体信息
    http请求为post请求,参数为contry,对应的url为https://api.inews.qq.com/newsqa/v1/automation/foreign/daily/list?country=%E7%BE%8E%E5%9B%BD&

  4. 使用urllib解析url

# 解析url
from urllib import parse # urllib为python中用于处理http请求,parse子模块用于处理url

# 使用unquote方法解析url
URL="https://api.inews.qq.com/newsqa/v1/automation/foreign/daily/list?country=%E7%BE%8E%E5%9B%BD&"

parse.unquote(URL)

url最后类似于乱码形式的字符串为国家名转码以后的文本。如果需要获取其他国家的数据,只需要将url变为:
https://api.inews.qq.com/newsqa/v1/automation/foreign/daily/list?country=国家名称&即可,在拼接时无法使用中文,可以使用quote进行转码

举例使用:

# 使用quote方式转码
URL="https://api.inews.qq.com/newsqa/v1/automation/foreign/daily/list?country=%s&"
country=input("请输入查询国家")
print(URL%(parse.quote(country)))

二、数据获取

使用requests模块模拟浏览器获取数据。
requests模块是python中的http请求库,使用简单且功能强大。需要进行安装,可以使用pip install requests来安装

  1. 模拟用户在浏览器敲回车发送请求。浏览器在发送请求时会携带一些信息,为了达到模拟浏览器的目的,爬虫也需要加入这些信息进行伪装,可以直接将浏览器中对应信息直接粘贴过来。"Referer"、"Host"、"Origin"、"User-Agent"为常用字段,根据浏览器中header中的这几项对应的值把他们粘贴过来。

在这里插入图片描述

import requests
URL="https://api.inews.qq.com/newsqa/v1/automation/foreign/daily/list?country=%s&"
headers={
    "Referer":"Referer: https://news.qq.com/",
    "Host":"api.inews.qq.com",
    "Origin":"https://news.qq.com",
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36"
}

requests.post(url,[data,][headers,][proxies,]*args):使用post方式向目标发送请求
-url:服务器对应地址
-data:请求时携带的数据
-headers:HTTP请求中headers字段
-proxies:设置代理IP地址

以上为post请求,若为get请求应改为requests.get(url,[data,][headers,][proxies,]*args)

  1. 定义get_response函数
def get_response(country):
    url=URL%(parse.quote(country))
    data={
        "country":country,
    }
    response=requests.post(url,data=data,headers=headers) # 发送请求:携带拼接好的url、参数data和headers
    return response
  1. 查看获取的内容
# 查看获取的内容
country=input("请输入查询国家:")
res=get_response(country) # 此时返回的是响应的对象

print(res.text) # response.text 查看响应中的文本信息
# 将数据写入本地
with open("yiqing.xls","a") as f:
    f.write(res.text)
  1. 虽然已经获取数据,但是数据本身并不直观,需要进行处理。通过前面的观察可以发现,数据时字符串形式的字典(json), 我们将其转化为字典,然后使用pandas进行处理,最后保存至Excel文件中。
data=res.text
data=eval(data) # 转为字典
# 数据中只有data对应的键值对为数据
data=data["data"]
print(data)
  1. 导入pandas ,需要进行安装
# 导入pandas ,需要进行安装
import pandas as pd # 使用as给包起别名

df=pd.DataFrame(data) # DataFrame为pandas中的一个数据结构,类似于二维表格
df
  1. 此时的数据比较明了,但是数据中有一项多余:confirm_add,即新增病例
    新增病例我们可以根据当前病例数减去昨日病例进行计算,所以此处可进行删除。
# DataFrame中的drop方法可以通过指定标签名称和相应的轴,或直接指定索引或列名称来删除行或列。通过axis来指定
df=df.drop(["confirm_add"],axis=1)
df
  1. 保存数据,写入本地Excel文件中
# 保存数据,写入本地Excel文件中
# python操作Excel文件需要安装环境依赖xlwt、xlrd工具包
df.to_excel("yiqing.xls",index=False) # to_csv可以写入到csv文件中
  1. 读取文件,查看写入数据
# 读取文件,查看写入数据
df=pd.read_excel("yiqing.xls",index_col=None)
df
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值