爬虫自学day3: requests模块巩固之破解百度翻译

在day2中讲到了UA检测,UA伪装。在接下来的案例中都会用到。UA伪装讲解
在这次爬取中,我们想要爬取的不再是整张页面,而是这张页面局部的文本数据。不用数据解析获得局部的页面数据。

如何实现?
我们发现百度翻译dog的翻译信息是存放在如下这样一个页面的:
在这里插入图片描述
我们只想拿到这个翻译结果。
我们发现在百度翻译界面,当我们在文本框删除dog后下面的翻译信息也随之清空了,输入dog后,不用触控任何一个按键就有信息局部刷新了。
特性:页面局部刷新
意味着:当在这个文本框录入单词后,会自动的进行Ajax请求发送。Ajax成功后,会将页面局部内容进行刷新。
打开抓包工具,捕获对应的Ajax请求:

  • 右键检查->Network->XHR(ALL对应的是所有的请求对应的数据包,XHR对应的Ajax请求对应的数据包
  • 我们发现cat这个单词三个sug:对应的参数分别为c;ca;cat。故每一个Ajax请求对应的是每一个字符的翻译结果。我们需要的是第三个Ajax请求数据包,即cat
    在这里插入图片描述
  • 拿到数据包对应的url,并且是POST请求。
  • 看一下响应信息response headers中的content type:故说明当我们的url发起请求时,服务器端响应回来的应该是一组json串。
  • 截取内容
    Request URL: https://fanyi.baidu.com/sug
    content-type: application/json

得出的结论是:
1、这个是一个POST请求,并且携带了参数
2、响应数据是一组json数据这组json串就是我们要去捕获的数据。

完整代码:

# -*- coding: utf-8 -*-
"""
Created on Wed Nov  4 14:51:36 2020

@author: 1
"""
import json
import requests 
if __name__ == "__main__":
    '''
    第一步:url的指定
    '''
    post_url = 'https://fanyi.baidu.com/sug'
    #进行UA伪装
    headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'
            }
      
    '''
    第二步:请求发送
    '''
    #post里的data相当于get里的params一样的,一样要是个字典数据。
    #我们当前的参数只有一个kw=cat,可以直接将kw赋为cat,这里写成动态的
    #post请求参数处理
    word = input('enter a word')
    data = {
            'kw':word
            }
  
    
    response = requests.post(url=post_url,data=data,headers=headers)
    '''
    第三步:获取响应数据
    '''
    #json方法返回obj(如果确认服务器响应数据是json才可以使用json方法进行对象的返回)
    dic_obj = response.json()
    print(dic_obj)
    '''
    第四步:持久化存储
    '''
    filename = word+'.json'
    fp = open(filename,'w',encoding='utf-8')
    #中文不能使用ASCII码,赋成false
    json.dump(dic_obj,fp=fp,ensure_ascii=False)
    print('over')

结果:
在这里插入图片描述
得到love.json:
{“errno”: 0, “data”: [{“k”: “love”, “v”: “n. 爱; 热爱; 慈爱; 爱情; 恋爱; 喜好; 喜爱; v. 爱; 热爱; 喜欢; 喜爱; 很喜”}, {“k”: “lovely”, “v”: “adj. 美丽的; 优美的; 有吸引力的; 迷人的; 令人愉快的; 极好的; 亲切友好的; 慷慨大方”}, {“k”: “lover”, “v”: “n. (婚外的)情人,情侣; 爱好者; 热爱者;”}, {“k”: “love you”, “v”: " 爱你; 醉后决定爱上你; 英;"}, {“k”: “loved”, “v”: “v. 爱; 热爱; 喜欢; 喜爱; 很喜欢; 很愿意; love的过去分词和过去式;”}]}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值