12. POST请求爬取数据实战

import json

json.loads(json_str) # json字符串转换成字典
json.dumps(dict)      # 字典转换成json字符串
  • 使用urllib发送POST数据,并抓取百度翻译信息
from urllib import request,parse
import json

url = 'http://fanyi.baidu.com/sug'

# 定义请求参数
data = {
    'kw' : 'python'
}
data = parse.urlencode(data) #编码转换

# 封装headers头信息
headers = {
    'Content-Length' : len(data)
}

# 发送请求,抓取信息
req = request.Request(url=url,data=bytes(data,encoding='utf-8'),headers=headers)
res = request.urlopen(req)

# 解析结果并输出
str_json = res.read().decode('utf-8') # json
myjson = json.loads(str_json) # 把json转字典
info = myjson['data'][0]['v']
print(info)
  • 使用requests发送POST数据,并抓取百度翻译信息
import requests
import json

url = 'http://fanyi.baidu.com/sug'

# 定义请求参数
data = {
    'kw' : 'python'
}

# 发送请求,抓取信息
res = requests.post(url,data=data)

# 解析结果并输出
str_json = res.content.decode('utf-8') # 获取响应的json字串
myjson = json.loads(str_json) # 把json转字典
info = myjson['data'][0]['v']
print(info)
  • 使用requests 实现翻译信息抓取
import requests
import json

def fanyi(keyword):
    url = 'http://fanyi.baidu.com/sug'

    # 定义请求参数
    data = {
        'kw' : keyword
    }

    # 发送请求,抓取信息
    res = requests.post(url,data=data)

    # 解析结果并输出
    str_json = res.content.decode('utf-8') # 获取响应的json字串
    myjson = json.loads(str_json) # 把json转字典
    info = myjson['data'][0]['v']
    print(info)

if __name__ == '__main__':
    while True:
        keyword = input('输入翻译的单词:')
        if keyword == 'q':
            break
        fanyi(keyword)
  • urllib模式:
from urllib import request,parse
import json

def fanyi(keyword):
    base_url = 'http://fanyi.baidu.com/sug'

    # 构建请求对象
    data = {
        'kw' : keyword
    }
    data = parse.urlencode(data)

    headers = {
        'Content-Length':len(data)
    }

    req = request.Request(url=base_url,data=bytes(data,encoding='utf-8'),headers=headers)
    res = request.urlopen(req)

    str_json = res.read().decode('utf-8') # 获取响应的json字串
    myjson = json.loads(str_json) # 把json转字典
    info = myjson['data'][0]['v']
    print(info)

if __name__ == '__main__':
    while True:
        keyword = input('输入翻译的单词:')
        if keyword == 'q':
            break
        fanyi(keyword)