Python爬虫获取新冠肺炎数据

本文描述了最基本的爬虫使用方法。
目标网站:https://news.qq.com/zt2020/page/feiyan.htm#/global
获取网站中外国某国家疫情感染人数。

一.网站分析

按F12进入开发者模式,查看目标网站的信息,以google浏览器为例子:
在这里插入图片描述选择network中的XHR,可以看到name中有很多项,在网页中点开目标国家(俄罗斯)的具体信息,可以看到在name栏中最下方出现了一个新的信息,查看具体信息可以看到一些相关的信息。
在这里插入图片描述http请求为post,参数为country,URL也可以查看。
url最后类似于乱码形式的字符串为国家名转码以后的文本。如果需要获取其他国家的数据,只需要将url变为
https://api.inews.qq.com/newsqa/v1/query/pubished/daily/list?country=国家名称&,
在拼接时无法使用中文,可以使用quote方法进行转码。

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

URL = "https://api.inews.qq.com/newsqa/v1/query/pubished/daily/list?country=%s&"#基本格式

country = input("请输入查询国家:")

print(URL%(parse.quote(country)))# 使用unquote方法解析url

输入目标国家后即可进行转码:
在这里插入图片描述

二.数据获取

requests模块是Python中的http请求库,需要进行安装。
浏览器在发送请求时会携带一些信息,为了达到模拟浏览器的目的,爬虫也需要加入这些信息进行伪装,可以直接将浏览器中对应信息直接粘贴过来。
在这里插入图片描述在这里插入代码片

request的使用格式:

requests.post(url,[data,] [headers,] [proxies,] *args)

-url:服务器对应的地址。
-data:请求时携带的数据。
-headers:HTTP请求中headers字段。
-proxies:设置代理IP地址

获取数据的程序如下:

from urllib import parse # urllib为Python中用于处理http请求,parse子模块用于处理url
import requests

def get_response(country):
    URL = "https://api.inews.qq.com/newsqa/v1/automation/foreign/daily/list?country=%s&"#基本格式
    headers = {
    "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"
    }
    url = URL%(parse.quote(country))
    data = {
    "country": country,
    }
    response = requests.post(url,data=data,headers=headers)
    print(url)
    return response

# 查看获取的内容
country = input("请输入查询国家:")
res = get_response(country)
print(res.text) # resposne.text 查看响应中的文本信息

三.处理保存数据

数据本身并不直观,需要进行处理。数据时字符串形式的字典(json), 将其转化为字典,然后使用pandas进行处理,最后保存至Excel文件中。
最后的完整代码如下:

from urllib import parse # urllib为Python中用于处理http请求,parse子模块用于处理url
import requests

def get_response(country):
    URL = "https://api.inews.qq.com/newsqa/v1/automation/foreign/daily/list?country=%s&"#基本格式
    headers = {
    "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"
    }
    url = URL%(parse.quote(country))
    data = {
    "country": country,
    }
    response = requests.post(url,data=data,headers=headers)
    print(url)
    return response

# 查看获取的内容
country = input("请输入查询国家:")
res = get_response(country)
#print(res.text) # resposne.text 查看响应中的文本信息
with open("yiqing.txt","a") as f:
    f.write(res.text)
data = res.text
data = eval(data) # 转为字典
# 数据中只有data对应的键值对为数据
data = data["data"]
# 导入pandas ,需要进行安装
import pandas as pd # 使用as给包起别名
df = pd.DataFrame(data) # DataFrame为pandas中的一个数据结构,类似于二维表格
df.to_excel("yiqing.xls", index=False) # to_csv可以写入到csv文件中
df = pd.read_excel("yiqing.xls", index_col=None)
df

运行演示:
在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值