一些概念
HTTP
Hypertext Transfer Protocol,超文本传输协议,旨在启用客户端和服务器之间的通信。
HTTP充当客户端和服务器之间的请求-响应协议。
即:客户端/浏览器向服务器发送HTTP请求,然后服务器将响应返回客户端,响应包含有关请求的状态信息,也可能包含所请求的内容。
HTTP方法
GET
GET是最常见的HTTP方法之一,用于从指定资源请求数据;
使用get请求时,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的,如:
/test/demo_form.php?name1=value1&name2=value2
注意:
·GET 请求可被缓存
·GET 请求保留在浏览器历史记录中
·GET 请求可被收藏为书签
·GET 请求不应在处理敏感数据时使用
·GET 请求有长度限制
·GET 请求只应当用于取回数据(不修改)
POST
POST 用于将数据发送到服务器来创建/更新资源。
通过 POST 发送到服务器的数据存储在 HTTP 请求的请求主体中:
POST /test/demo_form.php HTTP/1.1
Host: w3school.com.cn
name1=value1&name2=value2
注意:
·POST 请求不会被缓存
·POST 请求不会保留在浏览器历史记录中
·POST 不能被收藏为书签
·POST 请求对数据长度没有要求
GET versus POST
爬取新冠数据实验
from urllib import parse
import requests
import pandas as pd
#%%
#使用unquote解析url
URL="https://api.inews.qq.com/newsqa/v1/automation/country/daily/list?countrys=%E5%8D%B0%E5%BA%A6&"
print(parse.unquote(URL))
#%%
#使用quote转码
URL="https://api.inews.qq.com/newsqa/v1/automation/country/daily/list?countrys=%s&"
country=input("请输入查询国家:")
print(URL%(parse.quote(country)))
#%%
#使用request模块数据获取
URL="https://api.inews.qq.com/newsqa/v1/automation/country/daily/list?countrys=%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/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40"
}
country=input("请输入查询国家:")
def get_response(country):
url=URL%(parse.quote(country))
data={
"country":country,
}
response=requests.post(url,data=data,headers=headers)
return response
res=get_response(country)
print(res.text)
#%%
data=res.text
data=eval(data) #将字符串里的数据拿出来,转换为字典
data=data['data']['印度']
print(data)
#%%
df=pd.DataFrame(data)
print(df)
#%%
#进行一些数据处理
df=df.drop(["confirm_add"],axis=1) #按列删除一列数据
print(df)
结果如下图:
urllib安装
在直接pip install urllib的时候报错如下:
查询后发现是因为,python3中将2.x版本的urllib和urllib2两个库合并为一个urllib,所以在3.x环境中无法直接安装urllib2,需要安装第三方库urllib3来实现安装,同时 pip install urllib时要指定安装版本即pip install urllib=1.23.