思路
1.确定需求
2.观察url,分析url,找到指定的url
3.写代码
一、百度翻译
需求分析:获取某个特定的翻译文本数据
分析url:打开百度翻译页面,分别输入cat和dog两个单词,分析网站
百度翻译-200种语言互译、沟通全世界! (baidu.com)
百度翻译-200种语言互译、沟通全世界! (baidu.com)
发现只有后面的参数改变了,而且页面只是局部的更新-->ajax请求
找指定url方法:
1打开百度翻译页面
2右击'检查'--点击'网络'--点击'XHR'--在百度翻译页面的输入文本框,用英文状态输入cat--找到对应的sug(如下图,三个英文字母有三个sug,找到表单数据是cat的)
3从sug中可以得到如下信息:
请求url、请求方法、Content-Type、以及输入关键词要用的形参
代码:
#0
import json
import requests
if __name__ == '__main__':
#1指定url(但是是post请求)
post_url='https://fanyi.baidu.com/sug'
#2UA伪装
headers={
'User-Agent':'x' #x 是网页的User-Agent
}
#3处理参数 用字典封装参数
#设置为动态获取
word=input("enter word:")
data={
'kw':word
}
#4发送请求
response=requests.post(url=post_url,data=data,headers=headers)
#5获取相应数据 注意:text()返回的是字符串类型的数据 json()返回的是对象(如果确认响应数据是json类型的,才可以使用json() )
dic_obj=response.json()
#6持久化存储
#动态保存
fileName=word+'.json'
fp=open(fileName,'w',encoding='utf-8')
json.dump(dic_obj,fp=fp,ensure_ascii=False) #因为输出有中文,不能使用ascii码值
print("over")
结果
遇到的问题
ajax请求感觉还不是很懂,不知道在不知情的情况下要怎么看出是否是ajax请求(暂未解决)
二、豆瓣电影
需求分析:在豆瓣电影的某个页面获取当前页面的电影的数据(名称,导演...)
分析url(以豆瓣电影-排行榜-喜剧为例)
观察:鼠标拖到最底发现,鼠标回到某个位置并且页面中又加载了一些电影出来
发现:鼠标拖到最底会发送请求,并且url不变,是ajax请求
找到指定url:
网页右击'检查'--点击'网络'--点击'XHR'--在页面中鼠标拖动到最底--出现新的包
其中请求的url是:
https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=20&limit=20
代码中指定的url需要参数去掉(就是删除?和?后面的内容)
代码
#0
import requests
import json #因为要做持久化存储所以要导入json包
if __name__ == '__main__':
#1
url='https://movie.douban.com/j/chart/top_list'
#因为指定的url携带了参数 所以可以去掉参数,把参数封装到字典里面
param={
#发送请求的参数
'type':'24',
'interval_id': '100:90',
'action':'',
'start':'1',
'limit':'20'
}
#2
headers={
'User-Agent':'x' #x 是网页的User-Agent
}
#3
response=requests.get(url=url,params=param,headers=headers)
#响应数据最外层用的是[] (列表)
list_data=response.json()
#4 写入json格式的文件中
fp=open('./douban.json','w',encoding='utf-8')
json.dump(list_data,fp=fp,ensure_ascii=False)
#可以把结果复制到json解析器(直接在浏览器搜json解析,复制文件里面的内容过去)查看获取的数据
print("over")