Python爬虫练手示例——爬取百度翻译结果

一、关于用爬虫爬取想要的信息我们必须要明确一些主要步骤:

  1. 通过浏览器的开发者工具获取一些抓包工具找到目标URL(API接口);
  2. 分析普通的GET/POST请求还是Ajax型GET/POST请求;
  3. 选择合适的库进行爬取;
  4. 选择合适的库解析爬取的页面提取自己想要的结果,常见的有:正则表达式、xpath、BeautifulSoup等;

 

二、前期知识准备:

本次示例使用库是urllib库,不懂的可以参考之前的教程https://blog.csdn.net/CurtainOfNight/article/details/103330307 ;

 

  1. Python的Json库:
    1. dumps() 方法:将 Python 对象编码成 JSON 字符串。
json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

参数介绍:

(1)ensure_ascii 参数:默认为True, 如果被设置为False, 则可以返回non-ASCII的字符串。

json_data = json.dumps(data_dict)
print(json_data)    # {"name": "\u94b1\u7a0b", "shares": 100, "price": 542.23}
 
json_data = json.dumps(data_dict, ensure_ascii=False)
print(json_data)    # {"name": "钱程", "shares": 100, "price": 542.23}

 (2)sort_keys 参数:默认为False,如果设置为True,则输出的字典会按照key的字典序升序排列。

json_data = json.dumps(data_dict, ensure_ascii=False, sort_keys=True)
print(json_data)

            2. dump() 方法:用于写文件。

with open("json_dump_test.json", "w") as f:
    json.dump(data_dict, f, ensure_ascii=False)

           3. loads() 方法:将已编码的 JSON 字符串解码为 Python 对象。 

json_data = json.dumps(data_dict, ensure_ascii=False, sort_keys=True)
print(json_data)
print(json.loads(json_data))

           4. load() 方法:对应dump()方法

with open("json_dump_test.json", "r") as f:
    json_data = json.load(f)
    print(json_data)

          5. json 库支持下面这些类型转化为 json 的数据类型:

Python 类型Json 类型
dictobject
list, tuplearray
int, float number
Truetrue
Falsefalse
Nonenull

 

三、爬取百度翻译结果:

1. 首先分析一下百度翻译的页面,我们会发现当我们在输入框中输入要查询的单词时,整个主页面并没有发生变化,这时我们应该想到应该用到了ajax的异步传输方法!

                                                 

2.  我们现在已经知道百度翻译用的ajax的POST请求,那么下一步我们就要利用抓包工具分析出它向那个API接口发出的请求,由于不是很复杂我们就用Chrome浏览器的开发者工具就行了F12打开开发者工具,由于是ajax的异步传输所有我们只看XHR就行了(至于为什么大家可以去百度一下ajax的工作原理,这里小编将不再赘述了!)

我们查看第一个文件,看看它的返回结果这好就是我们要结果,那么我们直接从headers找到它的API接口就行了,大家可以看看第三个文件的返回结果也是我们想要的而且更加详细,大家自己可以尝试一下!

3. 找到API接口后,由于是POST请求所以我们还要知道要提交表单的参数,我们可以从headers的最底下看到要的参数是什么

 4. 好了,现在我们的API和参数都找到了,接下来我们就可以写代码了!

import urllib.request
import urllib.parse
import json

# 百度翻译的API接口
url = "https://fanyi.baidu.com/sug"
word = input("请输入要查询的单词:")

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 '
                  '(KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}

# 要加的参数
data = {
    'kw': word,
}

data = urllib.parse.urlencode(data).encode()

request = urllib.request.Request(url=url, headers=headers, data=data)

response = urllib.request.urlopen(request).read().decode('unicode_escape')

# 用Json模块把得到的json数据(其实它就是一种str字符串)转成Python中字典
response = json.loads(response)['data']

for word in response:
    print(word['k'] + ':' + word['v'])

结果:


                                            

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值