栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Python

python爬虫requests模块的编码流程

Python 更新时间:发布时间: 百科书网 趣学号
Requests模块的编码流程 1.指定url
 url ='https://www.baidu.com/s?tn=25017023_5_dg&ch=1&ie=UTF-8'#1.指定url
2.发送请求

主要用到response.get()函数和response.post函数
response.get()函数

 response = requests.get(url=url,params=param, headers=head)#2.发起请求

get函数的url参数就是你指定的url;
params参数是处理url携带的参数,可以定义一个数字字典,将其封装到字典中;

 kw = input('enter a word!')
    param = {'wd': kw}

headers参数是发送请求时所对应的User-Agent信息,这里涉及到UA检测和UA伪装

head = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
        }

response.post()函数

response = requests.post(url=url, data=data, headers=headers)

url参数就是你指定的url;

url ='https://fanyi.baidu.com/sug'#1.指定url

data参数是处理url携带的参数,可以定义一个数字字典,将其封装到字典中;

 word = input('enter a word:')
 data = {'kw':word}

headers参数是发送请求时所对应的User-Agent信息,这里涉及到UA检测和UA伪装

headers={
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
    }
3.获取响应数据

根据响应数据的类型确定采用requests的哪种方法,有requests.text和requests.json()
response.text

page_text = response.text

response.json()

 dic_json = response.json()
4.持久化存储
    fileName =jianru +'.html'
    with open(fileName, 'w', encoding='utf-8') as jy:
        jy.write(page_text )
    print(jianru +'over!')

filename是你要保存的文件名称,默认会保存在当前工作目录的下一级
w是打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
encoding='utf-8’声明python代码的文本格式是utf-8编码,也即告诉python解释器要按照utf-8编码的方式来读取程序。如果不加这个声明,无论代码中还是注释中有中文都会报错。注意不要有空格。

    fileName =word+'.json'
    fp = open(fileName,'w', encoding='utf-8')
    json.dump(dic_json, fp, ensure_ascii=False)

json.dump() 将内存中的值传入到指定json文件中
dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None,
default=None, sort_keys=False, **kw)
dump函数有两个参数必传,分别是obj和fp, obj是json格式的对象,fp是写入的文件对象。

5.示例代码
import requests
if __name__ == "__main__":
   #UA伪装:将对应的User-Agent封装到字典中,对应的是requests.get中第三个参数
    head = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
        }
    #处理url携带的参数,将其封装到字典中,对应的是requests.get函数中第二个params参数
    kw = input('enter a word!')
    param = {'wd': kw}
    url ='https://www.baidu.com/s?tn=25017023_5_dg&ch=1&ie=UTF-8'#1.指定url
    response = requests.get(url=url, params=param, headers=head)#2.发起请求
    page_text = response.text#3.获取响应数据
    print(page_text)
    fileName = kw+'.html'
    with open(fileName, 'w', encoding='utf-8') as fp:#4.持久化存储
        fp.write(page_text)
    print(fileName +'over')
#总结:requests.get的三个参数(url=xx, params=xx, headers=xx)
#requests模块的核心编码流程
#1.指定url 2.发起请求 3.获取响应数据 4.持久化存储
import requests
import json
if __name__ =="__main__":
    headers={
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
    }
    url ='https://fanyi.baidu.com/sug'#1.指定url
    word = input('enter a word:')
    data = {'kw':word}#我这里把word加了双引号,给它固定住了,应该去掉word,让它成为一个变量
    response = requests.post(url=url, data=data, headers=headers)#2.发送请求,这里为什么用post,而不用get呢,因为
    #从抓包工具中看,浏览器向百度翻译发送的是post请求,Request Method: POST
    dic_json = response.json()#3.获取响应数据,为什么不是requests.text呢?因为从抓包工具中看,Response Headers中的
    #Content-Type是json
    print(dic_json)
    fileName =word+'.json'
    fp = open(fileName,'w', encoding='utf-8')
    json.dump(dic_json, fp, ensure_ascii=False)#4.持久化存储,这里要用dump函数,表示写入文件,文件为json字符串格式,无返回
    #obj必传,表示待转换的文件,fp必传,表示文件对象
    #json.dumps 序列化时对中文默认使用的ascii编码.想输出中文需要指定ensure_ascii=False(此时编码为utf-8):
    print('over')
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/889396.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号