破解百度翻译
需求:
#post请求(携带了参数)
#响应数据是一组json数据
编写步骤:
1、指定url
2、进行UA伪装
3、post请求参数处理(同get请求一致)
4、发送请求
5、获取响应数据
6、持久化存储
post请求:
import requests
import json
if __name__ == "__main__":
#1、指定url
post_url = 'https://fanyi.baidu.com/sug'
#2、进行UA伪装
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36 SE 2.X MetaSr 1.0'
}
#3、post请求参数处理(同get请求一致)
data = {
'kw':'dog'
}
#4、请求发送
response = requests.post(url=post_url,data=data,headers=headers)
#5、获取响应数据:json()方法返回的是obj(如果确认响应数据是json类型的,才可以json())
dic_obj = response.json()
#print(dic_obj) #获取响应数据
#持久化存储
fp = open('./dog.json','w',encoding = 'utf-8')
json.dump(dic_obj,fp=fp,ensure_ascii=False)
print('over!!!')
对于开头的__name__ == "main"有疑问,所以查了查。有以下几种说法:
1)象征着Java等语言中的程序主入口,告诉其他程序员,代码入口在此。
2)name__属性是Python的一个内置属性,记录了一个字符串。
若是在当前文件,name 是__main。
在hello文件中打印本文件的__name__属性值,显示的是__main__
若是导入的文件,name__是模块名。
test文件导入hello模块,在test文件中打印出hello模块的__name__属性值,显示的是hello模块的模块名。
因此__name == ‘main’ 就表示在当前文件中,可以在if name == ‘main’:条件下写入测试代码,如此可以避免测试代码在模块被导入后执行。
总结:
“if name==‘main’:”很多时候看似无用,但是,出于代码的规范性,还是有必要的。
豆瓣电影
get请求:
import requests
import json
if __name__ == "__main__":
url = "https://movie.douban.com/j/chart/top_list?"
#Query String Parameters //get请求中url后面要带的参数,即上面url问号后面的内容
#params是一个计算机函数,表示函数的参数是可变个数的,即可变的方法参数
param = {
'type':'24',
'interval_id':'100:90',
'action': '',
'start': '0',#从库中的第几部电影去取
'limit': '20',#一次取出的个数
}
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36 SE 2.X MetaSr 1.0'
}
response = requests.get(url = url,params = param,headers = headers)
list_data = response.json()
fp = open('./douban.json','w',encoding='utf-8')
#json 模块提供了一种很简单的方式来编码和解码JSON数据。 其中两个主要的函数是 json.dumps() 和 json.loads()。
#json.dump()将一个Python数据结构转换为JSON;
#json.loads将一个JSON编码的字符串转换回一个Python数据结构;
json.dump(list_data,fp=fp,ensure_ascii=False)
print('over!')